在 C 中的程序开发期间删除注释

where the commenting is removed during the program devolopment in c

本文关键字:开发期 删除 注释 程序开发 程序      更新时间:2023-10-16

我在程序中添加了注释。

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

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

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

[着重号后加]

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

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

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;
}

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

它们在预编译(词法分析阶段(期间被删除,就像生成中间代码时一样,在那里不需要注释。

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

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

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

说删除注释是不正确的。最好说在编译过程中解析器会跳过注释。

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

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