宏导入外部函数

Macro import an extern function

本文关键字:函数 外部 导入      更新时间:2023-10-16

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

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

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

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

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

您可以使用行继续反斜杠轻松地在宏中包含多行:

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

行延续所做的只是使整个事情成为一条线。因此,当它被扩展时:

MAKE(foo)

它将扩展到行:

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

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