C++ gcc相当于#pragma注释

C++ gcc相当于#pragma注释,c++,gcc,pragma,C++,Gcc,Pragma,我正在尝试编写一个宏,用gcc编译器向可执行文件添加注释。这不是为了链接,我只是想添加文本注释。在gcc中是否有与此类似的“pragma注释”?我不确定“向可执行文件添加注释”是什么意思。谁或什么人将消费、展示甚至注意到这些评论?然而,如果您只是想确保某个字符串嵌入到程序的某个地方,那么只需在文件范围中将其声明为普通(C)字符串 static const char my_comment[] = "This comment should appear in the compiled executa

我正在尝试编写一个宏,用gcc编译器向可执行文件添加注释。这不是为了链接,我只是想添加文本注释。在gcc中是否有与此类似的“pragma注释”?

我不确定“向可执行文件添加注释”是什么意思。谁或什么人将消费、展示甚至注意到这些评论?然而,如果您只是想确保某个字符串嵌入到程序的某个地方,那么只需在文件范围中将其声明为普通(C)字符串

static const char my_comment[] = "This comment should appear in the compiled executable";

我不确定“向可执行文件添加注释”是什么意思。谁或什么人将消费、展示甚至注意到这些评论?然而,如果您只是想确保某个字符串嵌入到程序的某个地方,那么只需在文件范围中将其声明为普通(C)字符串

static const char my_comment[] = "This comment should appear in the compiled executable";

如果您不想将
.data
部分(这是
static const char[]
将要去的地方)与注释混在一起,或者相反,您想从
.comment
部分轻松找到注释,您可以在那里添加注释,并添加一点内联汇编:

__asm__(".section .comment\n\t"
        ".string \"Hello World\"\n\t"
        ".section .text");
Gcc还提供了
#ident
指令,该指令将文本复制到适当的部分(如果可用)。对于ELF,它将是.comment部分。尽管该指令不是标准的,但该解决方案可能比前者更具可移植性

#ident "Hello World"

如果您不想将
.data
部分(这是
static const char[]
将要去的地方)与注释混在一起,或者相反,您想从
.comment
部分轻松找到注释,您可以在那里添加注释,并添加一点内联汇编:

__asm__(".section .comment\n\t"
        ".string \"Hello World\"\n\t"
        ".section .text");
Gcc还提供了
#ident
指令,该指令将文本复制到适当的部分(如果可用)。对于ELF,它将是.comment部分。尽管该指令不是标准的,但该解决方案可能比前者更具可移植性

#ident "Hello World"
#ident可能有用。但有两个警告:

  • 它可能不适用于所有目标
  • 这既不是C语言标准,也不是GNU编码标准
  • “#ident”指令接受一个参数,一个字符串常量。在一些 系统中,该字符串常量被复制到 对象文件。在其他系统上,该指令被忽略。“sccs” 指令是“#ident”的同义词

    这些指令不是C标准的一部分,但它们不是 官方GNU扩展

    #ident可能有用。但有两个警告:

  • 它可能不适用于所有目标
  • 这既不是C语言标准,也不是GNU编码标准
  • “#ident”指令接受一个参数,一个字符串常量。在一些 系统中,该字符串常量被复制到 对象文件。在其他系统上,该指令被忽略。“sccs” 指令是“#ident”的同义词

    这些指令不是C标准的一部分,但它们不是 官方GNU扩展


    我想我问错了问题,但我会接受这个答案,因为它充分解决了我的问题。我想我问错了问题,但我会接受这个答案,因为它充分解决了我的问题。如果成功,是否会明显地在“.comment”之后有额外的二进制文件在目标文件中?我不太明白你的问题。这段代码将把字符串“Hello World”作为文本添加到.comment部分。默认情况下,Gcc已经在该节中生成了自己的版本字符串。在AIX 6.0.1世界中,使用
    .csect.comment[RO]
    而不是
    .section.comment
    ,使用
    .csect.text[PR]
    而不是
    .section.text
    作为编译器、汇编程序和链接器比预期的要旧。如果成功,在目标文件中“.comment”之后是否有额外的二进制文件?我不太理解你的问题。这段代码将把字符串“Hello World”作为文本添加到.comment部分。默认情况下,Gcc已经在该节中生成了自己的版本字符串。在AIX 6.0.1中,使用
    .csect.comment[RO]
    而不是
    .section.comment
    ,使用
    .csect.text[PR]
    而不是
    .section.text
    ,因为编译器、汇编程序和链接器比预期的要旧。