我正在使用:
#define
和
#if
允许我在单元测试期间模拟可能缺少的硬件。使用#define
语句的规则是什么?
即。它的默认范围是什么?我可以更改指令的范围吗?
答案 0 :(得分:12)
正如克里斯所说,#define的范围只是文件。 (值得注意的是,这与“类”不同 - 如果你有一个部分类型,它可能包含两个文件,其中一个有符号定义,其中一个没有!
您还可以在项目范围内定义符号,但这是使用project properties或compiler 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 ;
}