我对C ++编译器有疑问。
什么时候C ++编译器会创建一个公共符号?使用C编译器,我可以为目标文件提供通用符号,但是如果我使用C ++编译器(GNU)编译完全相同的代码,我只获得定义和未定义的符号。
所以问题是在什么情况下会导致变量/函数在C ++中编译为常见?
答案 0 :(得分:1)
他们中的一些人从未这样做过。已故和备受诟病的Watcom C ++编译器充分利用了通用符号来节省内联函数实例。 extern
的各种情况也可以通过这种方式经济地解决。
答案 1 :(得分:1)
存在公共符号的主要原因是Fortran具有公共块,因此名称为“公共符号”。常见符号的概念与C ++是对立的,而且它是一个相当严格的定义规则。 C具有类似的规则,但C标准还认识到允许相同符号的多个定义是该语言的常见扩展。 C ++没有“公共扩展”附录。供应商是否符合标准,或者不是。
结论:C ++编译器没有理由生成公共符号。