#define with space

时间:2011-03-04 12:32:47

标签: c++ macros c-preprocessor

是否可以使用以下空格编写define:

#define replace to replacement here

我想将“替换为”替换为“替换”。

编辑:

我想测试私人会员:

我写了

#define private public

但它不适用于Qt

中的私人广告位

所以我打算使用像

这样的东西
#define private slots: public slots:
无论如何,我已经找到了另一种测试插槽的方法,而且我知道这是一个丑陋的黑客。

6 个答案:

答案 0 :(得分:10)

不,你不能

#define identifier something

您定义的内容必须是 标识符 ,且不能包含空格。也不能包含连字符,以数字开头等,您只能定义标识符

你写的东西会起作用

#define replace to replacement here

但不像你期望的那样。此行定义replace替换为to replacement here

第h

答案 1 :(得分:3)

如果您正在进行单元测试,可以使用以下标志编译文件

-Dprivate=public

然后在您的单元测试中,您将能够调用您班级的每个私人方法。

修改

我最近评论说在gcc编译器上使用-fno-access-control标志允许您访问私有方法或成员。有关该主题的更多信息,请访问:Unit testing with -fno-access-control

答案 2 :(得分:2)

不,那是不可能的。为什么不这样做呢:

#define replace_to replacement here

答案 3 :(得分:1)

你可以......

#define replace replacement
#define to here

注意定义的意外副作用。你可能希望在他们完成工作后#undef

答案 4 :(得分:0)

可能不是。 它将理解,定义之后的第一个单词是标识符名称,其余的是其中的“主体”。

答案 5 :(得分:0)

通过全球搜索和替换,听起来有点像你想做的事情会更好。