在c中的程序开发期间删除注释的位置

use*_*349 1 c c++ linux comments

我在程序中添加了评论.

在开发期间,它将被删除,如编译,链接,加载.

Jer*_*fin 7

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

3 - 源文件被分解为预处理标记(2.5)和空白字符序列(包括注释).源文件不应以部分预处理标记或部分注释结束.每个注释都被一个空格字符替换.

[强调补充]


Mih*_*eac 6

从字面上看,它们在扫描(词法分析)后被忽略了.

以前,我被愚弄了由以下事实:如果你启用了调试符号生成,源仍然存在,你可以看到他们在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 
Run Code Online (Sandbox Code Playgroud)

从代码

int main()
{
    /* This is just a comment */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这是不正确的.注释不会在最终的可执行文件中结束,即使它是使用`-g`编译的.objdump的作用是找到源文件,并使用可执行文件中调试符号的行号信息,它包含原始源文件中的代码和注释.为了说服自己,尝试重命名1.c - objdump将不再显示源和注释,只能反汇编.为了进一步说服自己,改变1.c的内容,objdump将被"愚弄".对于最终测试,在objdump上运行strace以查看它是否打开并读取1.c. (2认同)