다음 코드 주어진다 :GCC 대 비주얼 스튜디오 매크로 확장
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
doSomething(1,2,3);
}
은 GCC 4.2은 다음을 제공하면서 :
void doSomething(int one, int two, int three)
{
//something here
}
#define ONE 1,2,3
#define TWO(arg) doSomething(arg);
#define THREE(arg) TWO(arg)
void doSomethingElse()
{
TWO(ONE)
THREE(ONE)
}
비주얼 스튜디오 2010 다음 처리기 출력 (생략 일부 빈 라인)을 갖는다 :
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
myFile.cpp:17:13: error: macro "TWO" passed 3 arguments, but takes just 1
TWO
}
표준인지는 확실하지 않지만 시각적 스터드처럼 작동하고 싶습니다. io가 작동 중입니다. 코드를 리팩토링하여 두 컴파일러에서 모두 작동하도록하는 방법이 있습니까?
보통 VS와 gcc가 다를 때 gcc가 맞습니다. –
이것은 Visual C++ 전처리 기의 알려진 버그로, 다시 스캔하기 전에 매크로를 확장하지 않습니다. gcc의 동작이 정확합니다. –
모든 답변을 주셔서 감사합니다 ... 제시된 솔루션의 측면에서 본인은 예제를 너무 단순화하여 작동시키지 못했다고 생각합니다. 다른 해결 방법을 찾았지만이 일반적인 문제에 대한 설명이 아니므로 여기에서 생략하겠습니다. – user109078