请问:空链接到底有什么用
请教:空链接到底有什么用?
请教:空链接到底有什么用?
还有内部连接,外部链接,这里的链接是啥概念啊?
空链接到底是啥意思?
谢谢
------解决思路----------------------
链接属性只分有无,不存在是空的还是实的。纯属翻译的问题。
标识符的链接是个讲起来麻烦的东西。
每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数(而是声明为其它一些东西,诸如typedef名、结构标记、联合标记和枚举标记,等等),或者,它被声明为函数参数,又或者,它指示一个对象,但只有块作用域且在声明时不包含存储类指定符extern,那么,它是无链接的。
所以,下例中的标识符F、t、g、e、Male、Female和a都是无链接的。
------解决思路----------------------
t仅仅是一个类型标记,不指示任何对象或者函数,仅这一条就已经不符合了。
------解决思路----------------------
链接,又称连接(纯属翻译问题),就是程序由源文件,首先编译成obj文件,然后是各个obj文件链接成exe文件。
在编译阶段,变量(包括普通变量,函数也是变量,用类生成的一个对象也是变量)在使用前,
需要有声明(要分清变量的声明与定义,普通变量及类的对象默认是定义,加上extern就是声明;函数原型就是声明,函数原型加函数体就是定义),
就通过编译。
通过编译后,还需要通过链接,就是声明的变量,要能够找到。
所谓空链接,就是在链接时,变量被隐藏了,链接器找不到,通常一些非全局变量,都是空链接的。
所谓内部链接,就是定义的变量,obj内部可以访问,外部obj无法访问,通常加上static关键字定义的都是内部链接。
所谓外部链接,就是内部外部都可能访问,没有static修饰的全局变量和全局函数都是外部链接
链接是针对变量而言,对于没有实例化的类型而言,由于没有地址,根本谈不上链接。类型定义是给编译器看的,而不是链接器。
请教:空链接到底有什么用?
还有内部连接,外部链接,这里的链接是啥概念啊?
空链接到底是啥意思?
谢谢
------解决思路----------------------
链接属性只分有无,不存在是空的还是实的。纯属翻译的问题。
标识符的链接是个讲起来麻烦的东西。
每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数(而是声明为其它一些东西,诸如typedef名、结构标记、联合标记和枚举标记,等等),或者,它被声明为函数参数,又或者,它指示一个对象,但只有块作用域且在声明时不包含存储类指定符extern,那么,它是无链接的。
所以,下例中的标识符F、t、g、e、Male、Female和a都是无链接的。
typedef void F (int, int);
struct t {/* …… */};
enum e {Male, Female,};
int f (void g (const char *))
{
char a [] = "Pride and Prejudice.\n";
g (a);
/* …… */
}
------解决思路----------------------
没听说过空链接。不知道是啥东西。
参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页
链接属性只分有无,不存在是空的还是实的。纯属翻译的问题。
标识符的链接是个讲起来麻烦的东西。
每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数(而是声明为其它一些东西,诸如typedef名、结构标记、联合标记和枚举标记,等等),或者,它被声明为函数参数,又或者,它指示一个对象,但只有块作用域且在声明时不包含存储类指定符extern,那么,它是无链接的。
所以,下例中的标识符F、t、g、e、Male、Female和a都是无链接的。typedef void F (int, int);
struct t {/* …… */};
enum e {Male, Female,};
int f (void g (const char *))
{
char a [] = "Pride and Prejudice.\n";
g (a);
/* …… */
}
t是有链接的吧!外部链接
t仅仅是一个类型标记,不指示任何对象或者函数,仅这一条就已经不符合了。
------解决思路----------------------
链接,又称连接(纯属翻译问题),就是程序由源文件,首先编译成obj文件,然后是各个obj文件链接成exe文件。
在编译阶段,变量(包括普通变量,函数也是变量,用类生成的一个对象也是变量)在使用前,
需要有声明(要分清变量的声明与定义,普通变量及类的对象默认是定义,加上extern就是声明;函数原型就是声明,函数原型加函数体就是定义),
就通过编译。
通过编译后,还需要通过链接,就是声明的变量,要能够找到。
所谓空链接,就是在链接时,变量被隐藏了,链接器找不到,通常一些非全局变量,都是空链接的。
所谓内部链接,就是定义的变量,obj内部可以访问,外部obj无法访问,通常加上static关键字定义的都是内部链接。
所谓外部链接,就是内部外部都可能访问,没有static修饰的全局变量和全局函数都是外部链接
链接是针对变量而言,对于没有实例化的类型而言,由于没有地址,根本谈不上链接。类型定义是给编译器看的,而不是链接器。