本文目录一览:
- 1、c语言中的连接是什么意思
- 2、c/c++中的标识链接有几种方式 外部链接 内部链接
- 3、C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思?
- 4、什么事内部链接和外部链接,什么事空链接
- 5、c语言调用外部函数连接不了
- 6、关于c语言中变量有外部链接内部链接和无 链接怎么理解?
c语言中的连接是什么意思
c语言中的连接指de是将obj文件生成为exe文件。
##可以作为连接字符串的连接符,##为宏扩展提供了一种连接实际变元的。如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描。
例如,下面定义的宏paste用于连接两个变元:
#definepaste(front,back)front##back
从而宏调用paste(name,1)的结果是建立单词name1。
扩展资料
C语言连接符的使用:
#includestdio.h
#defineOperations(x)operation_##x//##是黏贴字符串
intOperations(sum)(intx,inty){//operation_sum(intx,inty)
returnx+y;
}
intOperations(sub)(intx,inty){//operation_sub(intx,inty)
returnx-y;
}
intOperations(mul)(intx,inty){//operation_mul(intx,inty)
returnx*y;
}
floatOperations(div)(floatx,floaty){//operation_div(intx,inty)
floatresult;
result=x/y;
returnresult;
}
#definePrint(x)printf("%s,%d\n",#x,x);//#表示将参数转变为字符串
intmain()
{
intx;
floaty;
x=Operations(sum)(10,20);
printf("x=%d\n",x);
x=operation_sum(100,20);
printf("x=%d\n",x);
x=Operations(sub)(10,20);//operation_sub(10,20)也可以
printf("x=%d\n",x);
x=Operations(mul)(10,20);//operation_mul(10,20)也可以
printf("x=%d\n",x);
y=Operations(div)(11,20);//operation_div(11,20)也可以
printf("y=%lf\n",y);
Print(100);
return0;
}
c/c++中的标识链接有几种方式 外部链接 内部链接
当一个实现文件(.cpp ...)编译时,预处理器(CPP)首先递归的包含头文件,形成一个保含有所有必要信息的单个源文件. 这个源文件称为 编译单元.
内部连接 如果一个名称对于它的编译单元来说是局部的, 并且在连接的时候不可能与其它编译单元中的同样的名称相冲突,则这个名称具有内部连接.即具有内部连接的名称不会被带到目标文件中.
外部连接 在一个多文件程序中,如果一个名称在连接时可以和其他编译单元交互,那么这个名称就具有外部连接. 即具有外部连接的名称会引入到目标文件中,由连接程序进行处理.这种符号在整个程序中必须是惟一的.
具有内部连接的定义包括:
具有外部连接的定义包括:
声明本身不会将任何符合引入目标文件,所以声明都是内部连接的.
某些声明可以激活对一个外部连接定义的访问,也许我们会很随便的说这些声明具有外部连接,如:
int f();
extern int i;
class Point { static int s_numPoints; ... }; /* 类静态数据成员声明具有外部连接, 该数据必须在另一个地方被定义,如: point.c int Point::s_numPoints; */
还有一些声明即不把什么符号引入目标文件,也不能用来激活对外部连接定义的访问,我们常常称这类声明具有内部连接,
typedef int INT;
class Point;
struct Point;
把一个带有外部连接的定义放在 .h 文件中都会引起错误.由于类的声明和定义都是内部连接的,一般都放在 .h 文件中.
非内联的类成员函数.如: Point Point::operator+=(const Point right) { ... }
非内联,非静态的自由函数. 如: Point operator+(const Point left, const Point right) { ... }
非静态的全局定义.
加 static 前缀的全局变量定义.如: static int x;
枚举类型的定义.如: enum Boolean {NO,YES };
类的定义. 如: class Point { int d_x; int d_y; ... };
内联函数的定义.如: inline int operator==(const Point left,const Pointright) { ... }
union的定义.
名字空间中const常量定义
特别说明:
C++规定,有const修饰的变量,不但不可修改,还都将具有内部链接属性,也就是只在本文件可见。(这是原来C语言的static修饰字的功能,现在const也有这个功能了。)又补充规定,extern const联合修饰时,extern将压制const这个内部链接属性。于是,extern char const s[]将仍然有外部链接属性,但是还是不可修改的。 具体使用方法如下:
在cpp文件中:extern const int a=1;
在要使用该常量的cpp文件中:extern const int a;//也可以将其放到头文件中
coutaendl;
当用extern修饰const变量将强制为其分配内存,因为extern表示采用外部链接,因此其必须有某个地址保存其值。
C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思?
首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.
声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.
声明内部链接的变量的方法是在代码块外面声明它并加上static限定符. 此变量是全局变量,但仅在本文件中可用.
声明无链接的变量的方法是在代码块里面声明它并加上static限定符. 此变量是局部变量,但仅在本代码块中可用.
例:
#include...........
int global=1; //声明外部链接的变量
static int global2 //声明内部链接的变量
int func()
{
int global=5; //声明的内部变量和全局变量重名,调用时将会隐藏全局的global;
coutglobal; //是内部定义的global的值而不是外面的值.
//如何引用外面的变量呢???
cout::global; //可用作用域解析符(::)来说明你要输出的外面的全局变量.
static int global3; //声明无链接的变量
}
int main()
{
extern int alobal; //在本文件中此句可选.此句的意思为你需要引用外部的变量global;
global=8; //直接引用全局变量.
}
望采纳!!!!
什么事内部链接和外部链接,什么事空链接
C语言中的变量分为外部链接、内部链接、空连接三种:
(1)外部链接:外部链接的变量可以在多个文件中使用;
(2)内部链接:内部链接的变量只能在一个文件中使用;
(3)空链接:由定义变量的代码块作用域所私有;
文件作用域变量前面加关键字static就是内部链接,表明该变量为定义该变量的文件私有。
c语言调用外部函数连接不了
你必须用include包括file1和file2否则虽然你用extern告诉编译器有这两个函数,能通过编译,但是实际上编译器并不知道这两个文件在哪,所以会出错
关于c语言中变量有外部链接内部链接和无 链接怎么理解?
这部分内容是在程序的编译和link层面谈的。
一个大一些的工程往往不是只有一个程序文件,经常由好多C程序文件构成,有的时候里面个别程序可能还用的其他语言,编码完成后常常分别编译,编译完成再link到一起。某个C程序需要用到其他程序中定义过的变量,一般都加extern前缀,编译时编译器会预留访问链接的空位,等到link阶段再在整个工程的其他C编译结果中去对号,把访问链接填上。这就是外部链接。如果你程序全写在一个文件里,那永远都不会有外部链接。
内部链接常指一个程序文件中全局变量,可以被程序文件内各个子程序访问,这在编译过程中处理,和link阶段不发生关系。如果变量前加了static,那么它永远不会被外部程序访问,它不会被编译程序写入目标代码的链接区。
无链接,就是在一个单体程序里,比如一个子程序,定义一个变量只给这个程序段用,那就是无链接。编译器和link都不需要对这样的变量做跨程序段的地址链接,这样的变量都是直接分配寄存器或者近堆中的直接地址(每个子程序都有自己的基本存储空间,被调用时得到分配,返回时被释放,我习惯叫它近堆,标准叫啥早不记得了)。
变量是这样,程序代码段也大体差不多。每次在程序文件中调用一个文件内部的子程序,就产生一个内部链接;如果调用外部文件中的子程序,就产生一个外部链接。只有没有任何子程序,所有代码都写在一个文件里的程序,才是无链接程序。
链接是个编译和link层面的概念,所以不仅限于变量层面讨论。
对了,再延伸,可以把一些子程序文件归类,程序执行某部分任务才访问,其他时间不访问时,可以生成DLL。在程序执行那部分功能时,通过操作系统和DLL建立动态链接,当然这是外部链接,这也是程序设计中常用到的。这可以避免生成一个巨大的EXE,运行时吃掉过多的系统资源,还可以实现这个DLL中包含的子程序在操作系统级和其他程序共用。