2013-02-14 2 views
2

C++에서 다음 코드를 사용하려고합니다. 누군가 왜 오류를 보여주고 있는지 말해 줄 수 있습니까?C에서 키워드에 #define을 사용할 수없는 이유는 무엇입니까?

#define def namespace; 
using def std; 
int main(){ 
return 0; 
} 

다음과 같은 코드가 잘 작동하는 동안

#define def namespace std; 
using def; 
int main(){ 
return 0; 
} 
+0

왜 표준 키워드를 자신의 ..로 대체 하시겠습니까? –

+0

@Luc Touraille 그냥 상처와 함께 좋은 얻으려고 – banarun

답변

16

이 때문에 내장 세미콜론입니다 : 자체가 정의를 종료 세미콜론이 필요하지 않습니다

#define def namespace; 
        ^
         | 
        WHOA! 

#define 것을 그래서 하나를 사용하면 매크로가 사용되는 곳마다 삽입 될 텍스트의 일부가됩니다. 물론, 구문론 문제가

using namespace; std; 

:

전처리 한 후, 첫 번째 예에 using 라인을 설정한다.

수정 그렇게처럼 #define 줄에 후행 세미콜론을 제거하는 것입니다 : 매크로를 교정 할 때

#define def namespace 

당신은 당신의 컴파일러 사전 처리 코드를 읽는 방법을 파악해야한다, 항상 교훈이다 유도 된 혼란.

+1

와우. 나는 그것을 알아 채지 못했다. –

+7

@MarkGarcia : 전처리기에 문제가있을 때 호출 할 수 있는지보고 출력 할 수 있는지 알아 보는 것이 좋습니다. 예를 들어, GNU의 gcc에서는'gcc -E program.cc | 덜'. 생성 된 코드가 사용자의 기대를 충족시키는 지, 그리고 나중에 컴파일 단계에서 처리중인 코드를 정확하게 볼 수 있습니다. –

관련 문제