C ++奇怪的行为Visual Studio

时间:2015-03-12 12:04:37

标签: c++ visual-studio visual-studio-2012 defined

此代码为Visual Studio 2012和2008输出T2,T4,为gcc输出T1,T2,T3,T4。 是什么原因?

#include <iostream>

#define ABC

#define T1 defined(ABC)

#define T2 defined( ABC )

#define T3 defined(ABC )

#define T4 defined( ABC)


int main(int argc, char* argv[])
{

#if T1

    std::cout<<"T1"<<std::endl;
#endif


#if T2

    std::cout<<"T2"<<std::endl;
#endif


#if T3

    std::cout<<"T3"<<std::endl;
#endif


#if T4

    std::cout<<"T4"<<std::endl;
#endif

    return 0;
}

1 个答案:

答案 0 :(得分:4)

查看conditional directives页面。我发现:

  

已定义的指令可用于#if和#elif指令,   但没有其他地方。

将您的代码更改为:

#include <iostream>

#define ABC

int main(int argc, char* argv[])
{

#if defined(ABC)
    std::cout << "T1" << std::endl;
#endif


#if defined( ABC )
    std::cout << "T2" << std::endl;
#endif


#if defined(ABC )
    std::cout << "T3" << std::endl;
#endif


#if defined( ABC)
    std::cout << "T4" << std::endl;
#endif

    return 0;
}

将在VS 2013中生成T1,T2,T3,T4输出