C/C++ 매크로를 사용하면 자동으로 긴 구문을 생성하기가 쉽습니다. 예를 들어, 내가 나는 이런 식으로 뭔가 할 수있는 예외 (COM 노출 방법에 대한 필수)를 던지지하는 방법의 거대한 세트를 원하는 경우 :전 처리기가 매크로 확장 결과에 라인 브레이크를 삽입하도록하려면 어떻게해야합니까?
#define BEGIN_COM_METHOD\
try{
#define END_COM_METHOD\
return S_OK;\
} catch(exception&) {\
// set IErrorInfo here\
return E_FAIL;\
}
하는 등 매크로 관리 하나 "\"를 사용할 수 있도록하기를 문자를 사용하여 매크로 정의를 여러 줄로 읽을 수 있습니다.
문제는 때로는 그러한 구문이 컴파일되지 않는 코드이기 때문에 예상대로 확장되지 않으며 잘못된 코드가 컴파일러에 제공됩니다. 컴파일러는 일반적으로 "전처리 된 파일 생성"옵션을 사용하여 개발자에게 전처리 결과를 보여줍니다. 그러나 전처리 된 파일에서 매크로는 한 줄로 확장되고 그 결과는 거의 읽을 수 없습니다.
매크로 정의에 줄 바꿈이 나타나지 않도록 프리 프로세서를 만들 수 있습니까?
매크로를 사용해서는 안되는 경우 중 하나를 발견했습니다. 난독 화 된 제어 흐름은 특히 불쾌합니다. –
@nobugz 네,하지만 현재 우리는 1600 가지의 COM 관련 메소드를 가지고 있습니다. 각 메소드에서 try-catch 및 매개 변수 추적이 필요하며 이러한 종소리와 호각은 유지 보수가 가능해야합니다. C++은 매크로를 사용하여 그럴 수있는 다른 방법을 제공하지 않습니다. – sharptooth