繁体   English   中英

C ++编译器-生成的符号类型

[英]C++ compiler - generated symbol types

我很难找到C ++编译器究竟如何确定要定义或未定义的符号。 我的意思是我如何在C ++源代码中知道变量/函数将被编译为已定义还是未定义的符号。 首先,我认为所有已定义的变量/函数都将是已定义的符号,但似乎并非如此。 有没有一种方法可以同时考虑static,extern,inline,...关键字来确定这一点?

* update问题不关乎C ++中的定义和声明,也不关我的代码是否可以编译。 现在,我认为如果我编译代码并使用nm检查目标文件,则仅在C ++源代码中声明的某些函数/变量将成为已定义的符号。 我需要以下信息:定义/声明的C ++函数/变量如何编译为目标文件(例如ELF)的定义/未定义符号。

如果仅声明但未定义变量/函数,则不会定义。

// In global/namespace scope
int i; // defined
extern int ei; // not defined
extern int eid = 42; // assignment causes it to be defined

void foo(); // not defined
void bar() { } // defined

当您将foo.cpp编译为foo.o时,foo.cpp中定义的某些符号将出现在foo.o中,而其他符号将被“内联”。 假设这就是您的意思,那么您将发现这是特定于编译器且由实现定义的。 关于GCC对内联函数的行为,这里有一个有趣的讨论:

http://gcc.gnu.org/onlinedocs/gcc/Inline.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM