MSVC中的多通道预处理器?

时间:2017-01-12 15:53:04

标签: c++ visual-c++ cl.exe

我有代码:

#define __IGNORE__(...)
#define XUJ(x) ); if (x) { test2(); } __IGNORE__(0

void test2() {

}

void test() {

}

int main() {
    int x = 0;
    test(XUJ(x));
    return 0;
}

GCC编译,但cl.exe有错误:

$ cl 1.cpp
1.cpp(14): error C2059: syntax error: ;

但是......如果我将宏解压缩到:

test(); if (x) { test2(); } __IGNORE__(0);

它正常编译。 MSVC 2015编译器不支持多通道预处理器? O_O

UPD: 嗯....括号? O_O

$ cl /E 1.cpp

1.cpp
#line 1 "1.cpp"



    void test2() {

    }

    void test() {

    }

    int main() {
        int x = 0;
        test(); if (x) { test2(); } ;
        return 0;
    }

1 个答案:

答案 0 :(得分:-2)

奇怪的MSVC错误-_-

我将0移动到宏 - 错误修复-_-

#define KEEEK 0
#define __IGNORE__(...)
#define XUJ(x) ); if (x) { test2(); } __IGNORE__(KEEEK

void test2() {

}

void test() {

}

int main() {
    int p = 0;
    test(XUJ(p));
    return 0;
}