2010-01-22 2 views
7

C/C++ 매크로를 사용하면 자동으로 긴 구문을 생성하기가 쉽습니다. 예를 들어, 내가 나는 이런 식으로 뭔가 할 수있는 예외 (COM 노출 방법에 대한 필수)를 던지지하는 방법의 거대한 세트를 원하는 경우 :전 처리기가 매크로 확장 결과에 라인 브레이크를 삽입하도록하려면 어떻게해야합니까?

#define BEGIN_COM_METHOD\ 
    try{ 

#define END_COM_METHOD\ 
    return S_OK;\ 
    } catch(exception&) {\ 
     // set IErrorInfo here\ 
     return E_FAIL;\ 
    } 

하는 등 매크로 관리 하나 "\"를 사용할 수 있도록하기를 문자를 사용하여 매크로 정의를 여러 줄로 읽을 수 있습니다.

문제는 때로는 그러한 구문이 컴파일되지 않는 코드이기 때문에 예상대로 확장되지 않으며 잘못된 코드가 컴파일러에 제공됩니다. 컴파일러는 일반적으로 "전처리 된 파일 생성"옵션을 사용하여 개발자에게 전처리 결과를 보여줍니다. 그러나 전처리 된 파일에서 매크로는 한 줄로 확장되고 그 결과는 거의 읽을 수 없습니다.

매크로 정의에 줄 바꿈이 나타나지 않도록 프리 프로세서를 만들 수 있습니까?

+1

매크로를 사용해서는 안되는 경우 중 하나를 발견했습니다. 난독 화 된 제어 흐름은 특히 불쾌합니다. –

+2

@nobugz 네,하지만 현재 우리는 1600 가지의 COM 관련 메소드를 가지고 있습니다. 각 메소드에서 try-catch 및 매개 변수 추적이 필요하며 이러한 종소리와 호각은 유지 보수가 가능해야합니다. C++은 매크로를 사용하여 그럴 수있는 다른 방법을 제공하지 않습니다. – sharptooth

답변

6

할 수 없습니다. 대체 텍스트는 행의 끝까지이며 #define d이므로 줄 바꿈이 없습니다. 컴파일 문제가 자주 발생하지 않는 경우 사전 처리 된 파일을 indent 또는 이와 유사한 형식으로 실행 한 후 컴파일하면보다 읽기 쉬운 코드를 얻을 수 있습니다.

관련 문제