2014-04-08 2 views
1

는 동등한 다음과 같습니다 소스#define xxx는 소스에, -D xxx는 컴파일러에 정의합니까?

#define xxx 

gcc -D xxx 

첫 번째는 소스 파일에 적용됩니까가 표시되지 않는 경우는 다른 소스 파일에 표시하지 곳 xxx는 다른 파일에 정의되어 있지 않으므로?

두 번째 것은 xxx가 모든 소스 코드 파일에서 정의된다는 것을 의미합니까?

감사합니다.

답변

1

는 처음에만 나타나는 및 소스 파일에 적용됩니까 하지 그 xxx는 그 다른 파일에 정의되어 있지 그래서이 표시되지 않는 다른 소스 파일에서?

오른쪽.

두 번째 것은 xxx가 모든 소스 코드 파일에 정의된다는 것을 의미합니까?

두 방법은 같은 일을하지만 해상력의 범위는 두 경우 모두 다르다.

-D 옵션은 여기에서 소스 파일을 수정할 필요가 없으므로 makefile에서 널리 사용됩니다. 그러나 그 defination이 모든 파일에 특정적일 경우 적절한 파일에 정의하는 것이 좋습니다.

1

첫 번째 파일은 정의 된 소스 파일에만 적용되지만 여러 파일에 포함될 수있는 헤더 파일에 배치하여 정의를 더 많은 파일에 적용 할 수 있습니다. 두 번째 정의는 -D xxx로 컴파일 된 모든 파일에서 활성화됩니다.

1

나는 컴파일러 옵션이 컴파일하는 동안 기능을 비활성화하거나 활성화하여 파일을 편집 할 필요가 없기 때문에 도움이된다고 생각합니다.

1

예, 모든 점에있어. 헤더 파일에서 #define을하면 헤더 파일을 포함하는 모든 파일에 직접 또는 간접적으로 적용됩니다. 이것은 상수 또는 매크로를 정의하는 데 사용됩니다.

관련 문제