我正在尝试将项目从Borland C++迁移到Visual C++

我注意到如本例所述在处理枚举方面存在差异

档案:Test_enum.cpp

    #ifdef  _MSC_VER
        #include <iostream>
    #else
        #include <iostream.h>
    #endif
    #include <conio.h>

    using namespace std;

    enum {

        ENUM_0 =0,
        ENUM_1,
        ENUM_2,
        ENUM_3
        } ;

     int main(int argc, char* argv[])
    {
        #ifdef  _MSC_VER
        cout << "Microsoft Visual compiler detected!" << endl;
        #elif defined(__BORLANDC__)
        cout << "Borland compiler detected!" << endl;
        #elif
        cout << "Other compiler detected!" << endl;
        #endif
        #if ENUM_1 > 0
        cout << "ENUM_1 is well defined at preprocessing time" << endl;
        #else
        cout << "No way to see enum variables at preprocessing time" << endl;
        #endif
        cout << "Type any character to exit..." << endl;

        #ifdef  _MSC_VER
            _getch();
        #else
            getch();
        #endif

        return 0;
    }


在Visual Studio中运行代码将得到以下输出:

Microsoft Visual compiler detected!
No way to see enum variables at preprocessing time
Type any character to exit...


通过使用Borland,我得到:

Borland Compiler detected!
ENUM_1 is well defined at preprocessing time
Type any character to exit...


我想知道Borland如何识别enum吗?是否可以在visual中执行相同的操作?

最佳答案

旧的,过时且完全不相关的Borland C ++编译器有一些独特之处。其中之一是,您可以在预处理程序指令中使用C ++常量表达式。

#if sizeof -1 > 0
    cout << "It looks like you got lucky today" << endl;
#endif

const int answer = 42;
#if answer == 42
    cout << "Unbelievable" << endl;
#endif


在地狱中绝对不可能有任何机会可以与任何现代编译器一起使用。

10-08 08:23