代码之家  ›  专栏  ›  技术社区  ›  John Simons

C语言中有没有一种简单的方法可以根据操作系统版本使用条件编译符号?

  •  6
  • John Simons  · 技术社区  · 14 年前

    我有许多单元测试需要根据Windows OS版本进行条件编译。 此单元测试正在测试仅在Windows Vista及更高版本中可用的TXF。

    #if WIN_OS_VERSION >= 6.0
    // Run unit tests
    #endif
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Community CDub    7 年前

    我认为没有一种方法可以根据OS版本有条件地编译代码。定义状态的文档(Emphasis Mine):

    符号可用于指定 编制条件。你可以 用if或elif测试符号。 还可以使用Conditional属性执行条件编译。

    可以定义符号,但不能为符号指定值。 α的定义 在使用任何指令之前,指令必须出现在文件中 这也不是指令。

    还可以使用/define compiler选项定义符号。你可以 用undef取消定义符号。

    用/定义定义的符号 或与定义不冲突 同名的变量。也就是说, 不应传递变量名 到预处理器指令和 符号只能由 预处理器指令。

    使用define创建的符号的范围是定义符号的文件。

    你必须有条件地 运行 而是:

    void TestTxF() {
        if (System.Environment.OSVersion.Version.Major < 6) {
            // "pass" your test
        }
        else {
            // run it
        }
    }
    

    更新:

    有人问过这个 before .

        2
  •  0
  •   luke    14 年前

    您可以自己简单地管理调试符号。

    只要想出一个你可以坚持的模式( 把它记录下来! )然后,当您为一个新平台编译时,请记住更改处理器指令。

    例如,您可以有符号

    LATER_THAN_XP
    LATER_THAN_VISTA
    etc...
    

    然后你可以用 #ifdef 有条件编译

    #ifdef LATER_THAN_XP
    
    //Run Unit Tests
    
    #endif
    

    然后您可以在项目属性中定义这些常量。或者,如果你有冒险精神,你可以定义一个msbuild任务,在编译时导出要定义的正确符号,但这比我的工资等级高一点点。