宏导入一个extern函数

时间:2017-01-26 11:19:31

标签: c++

我有一个创建函数的宏(程序集标签) 定义为

define make(name) asm ("%0: hlt" :: "m"(name));

但是为了调用这个函数,我必须先导入它,如

make(exit);
extern "C" void exit()

为什么宏declare (import)不能用于函数?

1 个答案:

答案 0 :(得分:1)

使用行继续反斜杠可以在宏中轻松拥有多行:

#define MAKE(name)                \
    asm ("%0: hlt" :: "m"(name)); \
    extern "C" void (name)();

线路延续的作用只是使整个事物成为一条线。所以当它扩展时:

MAKE(foo)

它将扩展为行:

asm ("%0: hlt" :: "m"(foo)); extern "C" void (foo)();

如上所述,在宏中使用它们当然存在缺点。最值得注意的是,你不能将它作为非支撑循环或if中的语句。但是对于像你想要的那样的宏来说它并不重要,因为无论如何它可能会在全球范围内使用(或者它没有多大意义)。