c#预处理器指令范围

时间:2008-11-17 08:46:23

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

我正在使用:

#define

#if

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

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

5 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:3)

来自MSDN,其范围是文件

答案 2 :(得分:1)

虽然你不能沿着模拟物体的路线走下去,ala Mock.Rhinos

答案 3 :(得分:1)

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

即;

#define something
... some code ...

并且在任何方法,类主体或命名空间中,您可以像使用它一样使用它;

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

答案 4 :(得分:0)

预处理程序指令的范围从它从源解析时开始,并持续到其他方式。如果您确实想限制预处理程序指令的范围,请使用它完成后关闭的“undef”声明。

#include <iostream>
using namespace std ;
int main()
{
  #define someString "this is a string"
  cout<<someString<<endl;
  #undef someString  // scope of someString ends here
  cout<<someString<<endl; //this causes a compile error
  return 0 ;
}