C++ #用空间定义
是否可以使用以下空格编写define: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 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
脚本运行源代码。无论如何,你都不允许定义关键字,因此这里有双重错误。如果它不起作用,可能是某些代码(库?)已经用正确的关键字编译了吗?您可以重新定义关键字。