【问题标题】:c# Pre-processor directive scopec#预处理器指令作用域
【发布时间】:2010-09-22 15:31:09
【问题描述】:

我正在寻找使用:

#define

#if

允许我在单元测试期间模拟可能不存在的硬件。 #define 语句的使用规则是什么?

即它的默认范围是什么?我可以更改指令的范围吗?

【问题讨论】:

    标签: c# scope c-preprocessor preprocessor-directive


    【解决方案1】:

    是的,正如 Chris 所说,它的范围是整个文件。您可以在文件中的任何位置使用定义的关键字。

    即;

    #define something
    ... some code ...
    

    在任何方法、类体或命名空间中,您都可以像这样使用它;

    #if something
      ... some conditional code ...
    #else
      ... otherwise ...
    #endif
    

    【讨论】:

      【解决方案2】:

      正如 Chris 所说,#define 的范围只是文件。 (值得注意的是,这与“类”不同——如果你有一个部分类型,它可能包含两个文件,一个定义了符号,另一个没有!

      您还可以在项目范围内定义符号,但这是使用 project propertiescompiler switch 完成的,而不是在源代码中指定。

      【讨论】:

      • 注意 VS2017:项目范围的符号(在项目/属性中设置)似乎适用于单元测试项目。很不方便。
      • @Goodies:“不工作”是什么意思?编译器根本不应该关心它是否是单元测试属性。当然,单元测试项目不会看到生产项目中定义的任何内容。
      【解决方案3】:

      虽然你不能沿着 Mock 对象的路线走下去,ala Mock.Rhinos 吗?

      【讨论】:

        【解决方案4】:

        来自MSDN,它的作用域是文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多