2011-03-04 88 views
6

是否有可能写有空间,如定义:#定义与空间

#define replace to replacement here 

我想用“更换这里”取代“替换到”。

编辑:

我想测试私有成员:

我没写

#define private public 

但它并没有为私有槽Qt中

工作

所以我的打算是使用类似

#define private slots: public slots: 

无论如何,我已经找到了另一种方式来测试插槽,并通过我意识到这是一个丑陋的黑客。

+2

正如其他人所说,这是不可能的。将问题颠倒过来,*目标*是什么? – 2011-03-04 12:41:12

+1

如果您想永久更改它,请通过'sed'脚本运行您的源代码。 – dreamlax 2011-03-04 12:52:53

+0

无论如何您都不允许#define关键字,所以这里有一个双重错误。如果它不起作用,是不是有些代码(一个库?)已经用适当的关键字编译了? – 2011-03-04 17:23:00

回答

4

不,你不能

#define identifier something

定义必须是一个标识符不能包含空格什么。也不能包含连字符,以数字开始,等你只能定义一个标识符

你写什么工作

#define replace to replacement here

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

hth。

0

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

+0

标识符:替换为 – metdos 2011-03-04 12:35:33

0

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

#define replace_to replacement here 
+1

,因为“替换为”不是由我写的。 – metdos 2011-03-04 12:36:52

+0

试试这是否适用于你的编译器:“#define replace \ to replacement here”。如果没有,最好你可以做的事情可能是你的代码在编译之前用sed或类似的东西进行预处理。 – Axel 2011-03-04 12:43:30

1

你可以这样做......

#define replace replacement 
#define to here 

当心定义的意想不到的副作用。他们完成工作后可能会想要#undef

0

这听起来像你试图做的事情会更好地通过全球搜索和替换服务。

1

如果你正在做单元测试,就可以编译你的文件用下列标志

-Dprivate=public 

然后在你的单元测试,你就可以打电话给你的类的每一个私有方法。

编辑:

我最近指出,使用-fno的访问控制标记上gcc编译器允许您访问私有方法或成员。有关该主题的更多信息可以在这里找到:Unit testing with -fno-access-control