在C / C ++中定义全局标签

时间:2013-10-17 22:43:44

标签: c++ c label

我只想简单地定义一个指向a.c文件中一行代码的全局标签,然后b.c文件就可以识别该标签。两个文件都链接在一起。问题是b.c文件无法识别它,因为编译器/链接器认为a.c文件中的标签是特定于文件的。

我在这里找到了类似的问题和答案:Use label in Assembly from C 但我想用C / C ++而不是在Assembly中定义一个全局标签。

P.S。,我没有使用goto语句:)

2 个答案:

答案 0 :(得分:3)

根据C ++标准

标签的范围是它出现的功能。

答案 1 :(得分:0)

在GCC中,您可以通过内联汇编来实现:

#define LABEL_SYMBOL(name) asm volatile("labelsym_" name "_%=: .global labelsym_" name "_%=":);

,然后在您的代码中:

LABEL_SYMBOL("xxx")

符号后附加的_%确保其在编译单元(https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Special-format-strings)中是唯一的。

然后,您可以找到检查ELF程序标头的所有符号,如List all the functions/symbols on the fly in C code on a Linux architecture?

中所述