C++ 在c语言的程序开发过程中,注释被删除

C++ 在c语言的程序开发过程中,注释被删除,c++,c,linux,comments,C++,C,Linux,Comments,我在程序中添加了注释 在编译、链接、加载等开发过程中,它将在哪个步骤被删除。编译过程的词法分析阶段将删除程序中的注释。词法分析也称为扫描。编译过程的词法分析阶段删除程序中的注释。词法分析也称为扫描。它们在预编译词法分析阶段删除,因为生成中间代码时不需要注释。它们在预编译词法分析阶段删除,因为生成中间代码时不需要注释,不需要注释。编译过程中的词法分析部分会忽略输入字符串中的注释 如果您想出于任何目的使用程序注释,您必须编写自己的解析器。编译过程中的词法分析部分会忽略输入字符串中的注释 如果您想出于

我在程序中添加了注释


在编译、链接、加载等开发过程中,它将在哪个步骤被删除。

编译过程的词法分析阶段将删除程序中的注释。词法分析也称为扫描。

编译过程的词法分析阶段删除程序中的注释。词法分析也称为扫描。

它们在预编译词法分析阶段删除,因为生成中间代码时不需要注释。

它们在预编译词法分析阶段删除,因为生成中间代码时不需要注释,不需要注释。

编译过程中的词法分析部分会忽略输入字符串中的注释


如果您想出于任何目的使用程序注释,您必须编写自己的解析器。

编译过程中的词法分析部分会忽略输入字符串中的注释


如果您想出于任何目的使用程序注释,您必须编写自己的解析器。

从词汇上讲,它们在扫描词汇分析后被忽略

以前,我被以下事实愚弄了:如果您启用了调试符号生成,并且源代码仍然存在,那么您可以在gdb orobjdump中看到它们:


使用gcc-g-o01.c编译并通过objdump-CDgS a.out获得。这是因为这些工具在找到源文件时会读取源文件,并通过行号将二进制文件中找到的调试信息与源文件的内容关联起来。

从词汇上讲,它们在扫描词汇分析后被忽略

以前,我被以下事实愚弄了:如果您启用了调试符号生成,并且源代码仍然存在,那么您可以在gdb orobjdump中看到它们:


使用gcc-g-o01.c编译并通过objdump-CDgS a.out获得。这是因为这些工具在找到源文件时会读取它,并通过行号将二进制文件中找到的调试信息与源文件的内容关联起来。

说注释被删除是不正确的。 最好说解析器在编译期间跳过注释

解析器是一个程序,它开始读取用英语编写的C代码并将其转换为汇编代码。解析器程序只需阅读用英语编写的代码,并跳过以/*或//开头的句子


所以注释不会被删除—它们存在于您的C代码中,但编译器会跳过它们来创建程序集文件。

说注释被删除是不正确的。 最好说解析器在编译期间跳过注释

解析器是一个程序,它开始读取用英语编写的C代码并将其转换为汇编代码。解析器程序只需阅读用英语编写的代码,并跳过以/*或//开头的句子


因此,注释不会被删除—它们存在于您的C代码中,而是被编译器跳过以创建程序集文件。

指定为在翻译的第3阶段发生§:2.2/1:

3-将源文件分解为预处理标记2.5和包含注释的空格字符序列。源文件不得以部分预处理标记或部分注释结尾。每个注释都替换为一个空格字符


[强调添加]

指定在翻译的第3阶段发生§:2.2/1:

3-将源文件分解为预处理标记2.5和包含注释的空格字符序列。源文件不得以部分预处理标记或部分注释结尾。每个注释都替换为一个空格字符


[强调添加]

这不是预编译吗!?这不是预编译吗!?这是不正确的。注释不会在最终的可执行文件中结束,即使它是用-g编译的。objdump所做的是找到源文件,并使用可执行文件中调试符号的行号信息,包括来自原始源文件的代码和注释。为了说服自己,尝试重命名1.c-objdump将不再显示源代码和注释,只显示反汇编。为了进一步说服自己,更改1.c和objdump的内容将被“愚弄”。对于最后一个测试,在objdump上运行strace,查看它是否打开并读取1.c.Fixed,希望如此:这是错误的。注释不会在最终的可执行文件中结束,即使它是用-g编译的。objdump所做的是找到源文件,并使用可执行文件中调试符号的行号信息,包括来自原始源文件的代码和注释。为了说服自己,尝试重命名1.c-objdump将不再显示源代码和注释,只显示反汇编。为了进一步说服自己,更改1.c和objdump的内容将被“愚弄”。对于最后一个测试,在objdump上运行strace以查看它是否打开和关闭
阅读1.c.现在已修复,希望:
00000000004004ec <main>:
int main()
{
  4004ec:   55                      push   %rbp
  4004ed:   48 89 e5                mov    %rsp,%rbp
    /* This is just a comment */
    return 0;
  4004f0:   b8 00 00 00 00          mov    $0x0,%eax
}
  4004f5:   5d                      pop    %rbp
  4004f6:   c3                      retq   
  4004f7:   66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  4004fe:   00 00 
int main()
{
    /* This is just a comment */
    return 0;
}