【问题标题】:Define a global label in C/C++在 C/C++ 中定义一个全局标签
【发布时间】:2013-10-26 15:26:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你能提供一些代码示例更清楚吗?
  • 我认为做你想做的事违背了 C 语言的哲学。你能再解释一下吗?
  • 如果不作为goto 的目标,您打算将标签用于什么用途?这就是它在 C 和 C++ 中的全部设计目的,因此标签在定义它们的函数之外是不可见的。
  • “标签”的意义何在?

标签: c++ c scope label


【解决方案1】:

在 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?

【讨论】:

    【解决方案2】:

    根据 C++ 标准

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

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多