C++ #用空间定义

C++ #用空间定义,c++,macros,c-preprocessor,C++,Macros,C Preprocessor,是否可以使用以下空格编写define: #define replace to replacement here 我想将“替换为”替换为“此处替换” 编辑: 我想测试私人成员: 我确实写了 #define private public 但它在Qt中的私人插槽中不起作用 所以我打算用类似的东西 #define private slots: public slots: 无论如何,我找到了另一种测试插槽的方法,顺便说一句,我知道这是一个丑陋的黑客行为。可能不是。 它将理解define后面的第一个单

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

#define replace to replacement here
我想将“替换为”替换为“此处替换

编辑:

我想测试私人成员:

我确实写了

#define private public
但它在Qt中的私人插槽中不起作用

所以我打算用类似的东西

#define private slots: public slots:
无论如何,我找到了另一种测试插槽的方法,顺便说一句,我知道这是一个丑陋的黑客行为。

可能不是。 它将理解define后面的第一个单词是标识符名称,其余的是它的“body”。

不,你不能

#定义标识符某物

您定义的必须是一个标识符,它不能包含空格。也不能包含连字符、以数字开头等。只能定义标识符

你写的东西会有用的

#在此处定义替换到替换


但不是你想象的那样。这一行定义了
replace
替换为
替换此处的

否,这是不可能的。为什么不干脆这样做呢:

#define replace_to replacement here
你可以

#define replace replacement
#define to here

当心药物的非预期副作用。在他们完成工作后,您可能会想要
#取消定义他们。

听起来,通过全局搜索和替换,您试图做的事情会更好。

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

-Dprivate=public
然后在单元测试中,您将能够调用类的每个私有方法

编辑:


我最近注意到,在gcc编译器上使用-fno访问控制标志允许您访问私有方法或成员。有关该主题的更多信息可在此处找到:

,因为“替换为”不是我写的。请尝试在编译器中使用该选项:“#定义替换\在此处替换”。若并没有,最好的办法就是在编译之前用sed或类似的方法对代码进行预处理。正如其他人所说,这是不可能的。把问题颠倒过来,目标是什么?如果你想永久更改源代码,请通过
sed
脚本运行源代码。无论如何,你都不允许定义关键字,因此这里有双重错误。如果它不起作用,可能是某些代码(库?)已经用正确的关键字编译了吗?您可以重新定义关键字。