가능한 중복 :
How can I make the preprocessor insert linebreaks into the macro expansion result?C 프리 프로세서가 강제로 새로운 라인을 생성 할 수 있습니까?
#define IDENTIFIER { /*new line here*/\
my_multiline(); /*new line here*/\
macro(); /*new line here*/\
} /*new line here*/
내가 그것을 확장 년대에 새로운 라인을 생성하는 C 사전 프로세서를 강제로 할 수 있나요? 나는 이것을하기위한 표준 방법이 있다고 생각하지 않지만 Visual C++ (2008) 및 gcc에 대한 특정 플랫폼 해킹을 염두에 두지 않을 것입니다.
m4 또는 별도의 전처리기를 통해이 작업을 수행하는 데 관심이 없습니다.
이유는이 부탁 해요 :
그것은 더 많거나 적은 단지 호기심입니다. 그것은 해킹이기 때문에 이것을 프로덕션에서 시도하지는 않겠지 만 어쨌든 이것을 할 수 있는지 알고 싶습니다. 며칠 전 나는이 질문에 발견 : 이것은 해결책에게 자신을하고 싶은 질문이다
Can you turn off (specific) compiler warnings for any header included from a specific location?
. 나는 헤더를 포함하기위한 매크로를 만드는 것에 대해 생각했지만, 포함하기 전에 경고를 사용하지 않도록하는 올바른 pragma를 사용하여 경고를 끄고 싶은 헤더를 포함시키고, include 후에 경고를 사용하도록 설정했습니다.
물론 경고 및 포함을위한 pragma와 함께 mock includes를 생성하는 스크립트를 만들 수 있습니다.
내 첫 번째 문제점은 #include
이 사전 프로세서 지침이므로 매크로를 생성하는 데 다소 쓸모가 없다는 것이 었습니다. 이와
Is there a way to do a #define inside of another #define?
나는 나는 그것이 확장의에서 개행 문자를 생성하는 컴파일러를 강제 할 수있어 경우에 특별한 매크로를 포함 생성 할 수 있다고 생각 :하지만 나는이 대답을 발견했다.
저는 지금 집에 있지만 내일 직장에있을 때 제 코드를 게시 할 것입니다.
'# define'에는 식별자가 필요합니다. 그리고 어쨌든 공백이 어떤 용도로 사용됩니까? 확장 된 코드는 절대 보지 못합니다. – GManNickG
@GMan : 그는 아마도 매크로 자체를 더 읽기 쉽게하려고합니다. – CookieOfFortune
왜 그렇게하고 싶은지에 대한 배경 지식을 줄 수 있습니까? 작성하려는 특정 매크로가 있습니까? 어쩌면 문제에 대한 다른 해결책이있을 수 있습니다. –