如何为函数调用进行令牌粘贴?

时间:2014-04-01 06:32:13

标签: c++

我的代码中有以下一行。

QDBusConnection bus = QDBusConnection::systemBus();

or 

QDBusConnection bus = QDBusConnection::sessionBus();

我想在makefile中定义宏,它将启用系统总线或会话总线。 但是,我想做标记粘贴,就像那样。

在makefile中

if($(SYSTEM),Y)

    #define DBUS systemBus

endif

所以,在.c文件中 -

我想做以下事情。

  QDBusConnection bus = QDBusConnection::##DBUS();

我该怎么办?当我尝试进行字符串连接时,我收到错误。

1 个答案:

答案 0 :(得分:1)

标记粘贴##只能在宏定义的替换文本中使用。它不能在宏定义之外使用。

但无论如何也没有必要;你可以简单地用C代码写一下:

#ifndef DBUS
#define DBUS sessionBus
#endif

QDBusConnection bus = QDBusConnection::DBUS();

然后使用makefile,安排使用:

调用C编译器
-DDBUS=systemBus

需要时。或者您可以让makefile始终指定sessionBussystemBus之一,但在代码中(或代码使用的标头中)使用默认设置仍然是个好主意)。