태그 보관물: c

c

헤더의 매크로 대 정적 함수 수있는 이러한 경우에

함수를 사용할 수있는 많은 빠른 작업을 위해 f(x,y)일반 C에서는 매크로가 사용됩니다. 함수 호출 (즉, 임의 코드의 코드 확장이 아닌 함수 인라인에 사용되는 매크로)으로 해결할 수있는 이러한 경우에 대해 구체적으로 묻고 싶습니다.

일반적으로 C 함수는 다른 C 파일에서 링크 될 수 있으므로 인라인되지 않습니다. 그러나 정적 C 함수는 정의 된 C 파일 내에서만 볼 수 있습니다. 따라서 컴파일러에서 인라인 할 수 있습니다. 더 안전한 코드를 생성하기 때문에 많은 매크로를 정적 함수로 바꾸어 대체해야한다고 들었습니다.

이것이 좋은 생각이 아닌 경우가 있습니까?

다시 : 함수로 표현할 수없는 ## 같은 구성을 가진 Code-Production 매크로에 대해서는 묻지 않습니다.



답변

함수 호출로 해결할 수있는 매크로에는 많은 함정이 있습니다.

  • 와 같은 인수를 올바르게 처리해야하기 때문에 쓰기가 어렵습니다 ++i.
  • 매크로를 거치거나 중단 점을 넣을 수 없으므로 시각적 디버거로 디버깅하기가 어렵습니다.
  • 컴파일 종속성을 분석 할 때 올바르게 처리하기가 어렵습니다.

함수 호출로 해결할 수있는 매크로는 기본 컴파일러에서 인라인을 제공하는 데 유용했을 수 있습니다. 인라인 함수를 처리하지 않는 컴파일러는 알지 못하고 일부는 컴파일 단위에서 인라인 할 수 있습니다.

일반적으로 C 함수는 다른 C 파일에서 링크 될 수 있으므로 인라인되지 않습니다.

컴파일러가 전통적인 버전 callinlined 버전의 두 가지 버전의 함수를 제공 할 수없는 이유는 없습니다 . 대상으로하는 컴파일러의 설명서를 봐야합니다. 또한 생성 된 어셈블리를보고 싶을 수도 있습니다. 어셈블리를 모르더라도 일부 기능이 인라인되었는지 여부를 빠르게 알 수 있습니다. (아기 예부터 시작하여 빨리 배우십시오.)


답변