gcc使用了多少代码?

Laz*_*zer 20 c c++ compiler-construction gcc

  • 特别是对于C和C++,默认使用了多少次传递?
  • 此数字是否会根据所使用的优化级别而变化?(这应该)
  • 可以直接更改吗?

我在http://gcc.gnu.org/上搜索这些信息,但谷歌搜索site:http://gcc.gnu.org/没有产生任何结果.

任何有关此文档的指针也会有所帮助.


通过我的意思是仅传递源代码的原始表示,而不是维基百科建议的多传递定义.

nos*_*nos 6

编译器的通过和文件可能是您最接近的内容.


Vea*_*cus 0

据我的编译器设计课程中的某人告诉我,gcc 执行一次传递,而其他编译器(例如 Visual Studio(默认)使用的编译器)使用两次传递。这就是为什么如果您以循环方式使用类,则必须在 C++ 中前向声明类。

Class A {
   B* b; 
}

Class B {
   A* a;
}
Run Code Online (Sandbox Code Playgroud)

C# 和其他语言不需要这样做,因为第一遍构建引用,第二遍编译。

但话又说回来,我不是编译器方面的专家。

  • 前向声明是语言的属性,与 gcc 无关。可能与K&R原版C编译器的实现有关。 (11认同)
  • 这更多地与独立翻译单元和链接的概念相关。可以说,这是一个单独的编译器传递,但不是 GCC 传递。 (3认同)