C/C++로 작업 한 대부분의 사람들은 전처리 기가 어떻게 작동하는지에 대한 직감을 가지고 있다고 생각합니다. 나는 오늘까지 그렇게 생각했지만, 나의 직감은 틀린 것으로 판명되었습니다. 이야기가 있습니다 :(이상한?) GCC 전 처리기 동작
오늘 나는 무언가를 시도했지만 그 결과를 설명 할 수는 없습니다. 먼저 다음 코드를 고려하십시오.
#define A B
#define B A
A
B
어떻게됩니까?
이A
B
글쎄, 좋아, 어쩌면 누군가가 기대하지 무엇을, 그러나 설명 할 수 있습니다 : 글쎄, -E 플래그로 컴파일 후 결과가 이것이다. 전처리 기는 어떻게 든 문제가 있다는 것을 알아 냈고,하지 않았습니다. 나를 위해, 설명 할 수없는 결과를받는 지금
#define A B
#define B A C
#define C x
A
B
:
A x
B x
어떻게 이런 일이 않았다 내가 노력
다음 일이 있었다? 어떻게 된 일인지 알 수는 없습니다. 첫 번째 명령 (#define A B)은 실행될 수 없습니다. 왜냐하면 A가 B로 대체 될 것이므로 최종 결과는 두 명령 모두 동일해야하기 때문입니다. 그러나 그렇지 않다면 "A x"가 일어날 수있는 방법이 없습니다!
내 질문 : 무엇이 누락 되었습니까? 분명히 나는 전처리 기가 어떻게 작동하는지 정확한 방법을 모른다. 그것에 관한 소식을 알고 있습니까?
그리고 이것이 #define이 피할 필요가있는 이유입니다 ... – Goz
네, 다른 이유입니다. 전혀 사용하지 않는 것이 아닙니다. 일부 작업의 경우 매우 유용합니다 (i.m.o로가는 길). – George