在 C 中的程序开发期间删除注释
where the commenting is removed during the program devolopment in c
我在程序中添加了注释。
在哪个步骤中,它将在编译,链接,加载等过程中被删除。
它被指定为在翻译的第 3 阶段发生 (§:2.2/1(:
3 - 源文件分解为预处理标记 (2.5( 和空格字符序列(包括注释(。源文件不得以部分预处理令牌或部分注释结尾。每个注释都替换为一个空格字符。
[着重号后加]
从词法上讲,它们在扫描(词法分析(后被忽略。
以前,我被以下事实所愚弄:如果您启用了调试符号生成,并且源代码仍然存在,则可以在gdb
或objdump
中看到它们:
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 代码中,但编译器会跳过它们来创建程序集文件。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- GCC对可能有效的代码抛出init list生存期警告
- 从控制台中删除最后打印的元素
- 从全局向量中删除的元素的生存期
- 在 C 中的程序开发期间删除注释