以下功能的链接是什么
What are the linkage of the following functions?
当我阅读c++03标准(7.1.1存储类说明符[dcl.stc])时,下面有一些例子,我不知道如何确定每个连续声明的链接?有人能帮忙吗?提前感谢!
static char* f(); // f() has internal linkage
char* f()
{ /* ... */ } // f() still has internal linkage
char* g(); // g() has external linkage
static char* g()
{ /* ... */ } // error: inconsistent linkage
void h();
inline void h(); // external linkage
inline void l();
void l(); // external linkage
inline void m();
extern void m(); // external linkage
static void n();
inline void n(); // internal linkage
static int a; // a has internal linkage
int a; // error: two definitions
static int b; // b has internal linkage
extern int b; // b still has internal linkage
int c; // c has external linkage
static int c; // error: inconsistent linkage
extern int d; // d has external linkage
static int d; // error: inconsistent linkage
UPD:此外,我如何理解标准中的声明
一个实体的连续声明所暗示的联系应一致。也就是说,在给定的范围内,每一个声明相同的对象名称或函数名称的相同重载都意味着相同的链接。然而,给定的重载函数集中的每个函数都可以有不同的链接。
除非在全局范围内声明的独立函数或变量上使用static
,否则它们将具有外部链接。
注意,在函数上使用关键字inline
不会改变函数的链接。
另一个需要注意的重要点是,与C.不同,const
变量在C++中具有内部链接
一个实体的连续声明所暗示的联系应一致。也就是说,在给定的范围内,每一个声明相同的对象名称或函数名称的相同重载都意味着相同的链接。然而,给定的重载函数集中的每个函数都可以有不同的链接。"
一个声明向编译器引入了一个标识符,这样编译器就可以知道它的类型。在C++中,可以根据需要多次声明标识符,例如:
void doSomething(int, double); // External Linkage
extern void doSomething(int, double); // External Linkage is explicitly mentioned
引用的段落意味着,对于同一标识符的所有此类声明都应该指定相同的链接。例如,以下内容无效:
void doSomething(int, double); //External Linkage
static void doSomething(int, double); //Internal Linkage due to static
然而,同一功能的重载版本可能具有不同的链接,因此以下内容是有效的:
void doSomething(int, double);
extern void doSomething(int, double);
void doSomething(double,int);
相关文章:
- 返回的指向C++对象的链接是什么样的
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 在使用库时,找到要链接的必要库的快速方法是什么
- 是什么导致macOS Mojave上的GoogleTest链接错误
- 将枚举与 CMake 链接的正确方法是什么?
- 在没有额外代码的情况下链接两个独立类的最通用方法是什么?
- 字符串文本不能有外部链接的原因是什么?
- 我的链接列表反向递归方法的代码的问题是什么?
- g++中“main( )”的链接是什么
- 在Linux上构建具有链接时代码生成功能的静态库的正确方法是什么
- 以下功能的链接是什么
- 为什么我使用静态库编译和链接是正确的,而动态库是错误的
- 动态链接是如何工作的,它的用法以及如何以及为什么要制作dylib
- gcc/ld:什么对-Wl,-rpath在动态链接中什么对-l在静态链接中
- Visual studio c++静态链接做什么
- c库的链接点是什么
- 与gcc和g++的链接有什么区别吗?
- main()的链接是由实现定义的,这意味着什么
- 名称或类型具有某种语言链接意味着什么