일부 변수를 정의하는 매크로가 있다고 가정합니다. 코드의 다른 부분에서 두 가지 방법으로 정의해야합니다 (예, 나쁜 아이디어이지만 리팩터링은 좋은 방법입니다).큰 블록의 C++ 매크로를 뒤집을 수 있습니까?
아래 스 니펫이 작동하도록 할 수 있습니까? 즉, 4와 1을 출력 할 수 있습니까?
#include <iostream>
#define ENABLE
#ifdef ENABLE
#define B 4
#define C 5
//imagine a bunch more here
#else
#define B 1
#define C 2
//imagine a bunch more here
#endif
int main()
{
std::cout << B << std::endl;
#pragma push_macro("ENABLE")
#undef ENABLE
std::cout << B << std::endl;
#pragma pop_macro("ENABLE")
return 0;
}
은 특히 B를 정의하여 같은 효과를 달성하기 위해 확실히 가능하지만, 내가 매크로의 큰 블록이있는 경우, 그 실제적인 100 % 아니다 :
#include <iostream>
#define B 4
int main()
{
#pragma push_macro("B")
#undef B
#define B 1
std::cout << B << std::endl;
#pragma pop_macro("B")
std::cout << B << std::endl;
return 0;
}
enable을 명령 줄 플래그로 설정하고 플래그를 지정하거나 설정하지 않고 컴파일 할 수 있습니다. –
같은 프로젝트에 있습니다. 그것은 끔찍한 부분입니다. 두 블록 모두 특정 컴파일에서 라이브 코드이며 다른 영역에서 다르게 정의됩니다. – Carbon
@ Carbon 본 매크로 블록을 모두 적절한 대체 방법으로 교체해야하는 것으로 보입니다. – VTT