2011-02-10 4 views
2

는 어디 선가C 퍼즐 {MACRO}

#include <stdio.h> 
int main() 
{ 
    { 

     /*Fill in something here to make this code compile 
      ........... 
     */ 
     ooOoO+=a;  
    } 
    #undef ooOoO 
    printf("%d",ooOoO); 

    return 0; 
} 

요약하면 다음 퍼즐을 가로 질러왔다 나는 #undef 에디션 된 후 내가 printf와의 ooOoO을 사용하는 방법을 물어보고 싶은?

+2

당신은 두 개의 개방 (주'다음에 중괄호가)를'; 그게 의도 된거야? –

+0

나는 그것이 있다고 생각한다. 그것도 퍼즐을 재미있게 만듭니다. – Atmocreations

+0

@James 그것은 의도 된 것이며, 아래의 VJo와 같은 사소한 솔루션을 방지합니다. –

답변

12

당신은 변수로 선언해야합니다

#define ooOoO int ooOoO = 42; int a = 1; { ooOoO 

매크로 대체 비 재귀; ooOoO이 대체되는 동안 식별자 ooOoO은 매크로 이름으로 처리되지 않습니다. 당신이 매크로를 사용하지 않는 솔루션을 찾고 있다면


, 당신은 단순히 #undef 지시를 무시하고 매크로로 ooOoO를 선언 할 수 없다. C 및 C++ 모두 #undef에 매크로로 정의되지 않은 식별자가 허용됩니다.

+0

여는 대괄호? OP 질문에 여는 괄호의 수는 닫는 괄호의 수와 일치합니다. 내가 놓친 게 있니? – Atmocreations

+0

@Atmoscreations :'main()'다음에 나오는 두 번째 왼쪽 중괄호가 오타라고 가정했습니다. 그렇지 않다면, 소개하는 블록은'ooOo'를 변수로 선언하기 전에 닫아야합니다. 그렇지 않으면'printf' 문에 도달했을 때 범위에 있지 않습니다. –

+0

브래킷이 의도 된 것 같아요.하지만 당신 말이 맞아요. 이로 인해 변수가 범위를 벗어납니다. – Atmocreations

1
#include <stdio.h> 
int main(){ 
{ 

     /*Fill in something here to make this code compile 

*/ 
} 
int a = 0, ooOoO=0; 
#define ooOoO ooOoO 
{ 
/* 
     */ 
       ooOoO+=a;  
      } 
      #undef ooOoO 
      printf("%d",ooOoO); 

return 0; 
} 
+0

끝 부분에는'}'가 없으므로 컴파일되지 않습니다. – Atmocreations

3

어때?

#include <stdio.h> 
int main(){ 
    int ooOoO = 0; 
    { 
     int a = 3; 
     ooOoO+=a; 
    } 
    #undef ooOoO 
    printf("%d",ooOoO); 

    return 0; 
} 
+1

메인 뒤에 두 번째 여는 브래킷이 없습니다. 그래도 질문과 일치하지 않습니다. – Atmocreations

0

#undef를 그것이 다른 무언가로 대체되지 않도록 프리 프로세서 기호 정의를 해제하지만, OOOOO는 여전히 컴파일러를 가져옵니다.

+0

물론, 범위 내에서 ooOoO가 어떻게 정의 되었습니까? 그것이 다른 대답이 제공하는 것입니다. –

+0

물론이 내용이 명시 적으로 요구되었습니다. 제임스 맥닐 즈 (James McNeils)는 해결책을 제시했으나 내가 게시 한 후에 편집에서 설명했다. – TomasG

6

코드 (들여 쓰기)를 재 포맷하고 솔루션을 추가 한 후, 그게 내가받을 수있는 작업은 다음과 같습니다

#include <stdio.h> 
int main() 
{ 
    { 
/*-Insert starts here-*/ 
    } 
    int ooOoO = 0, a=3; 
    { 
/*-Insert ends here-*/ 
     ooOoO+=a;  
    }  
    #undef ooOoO 
    printf("%d",ooOoO);  
    return 0; 
} 

컴파일 및 인쇄 3