发布网友 发布时间:2022-04-23 00:27
共3个回答
热心网友 时间:2023-09-18 16:39
c语言中的连接指de是将obj文件生成为exe文件。
##可以作为连接字符串的连接符,##为宏扩展提供了一种连接实际变元的。如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描。
例如,下面定义的宏paste用于连接两个变元:
#definepaste(front,back)front##back
从而宏调用paste(name,1)的结果是建立单词name1。
扩展资料
C语言连接符的使用:
#include<stdio.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;
}
热心网友 时间:2023-09-18 16:39
c语言程序编译过程分两步。第一步,形成 obj 文件,第二步,形成 exe 文件。从 obj 到exe 的过程叫链接。
c语言程序,可以由若干个.c文件组成,每个.c,可以独自编译,形成 各自 的 obj 文件。
例如:a1.c a2.c
a1.c 里有 main() 函数
a2.c 里没有 main() 函数,但有别的函数。例如 scanf(),printf(),sqrt(),sin(),cos()....
CL a1.c -c 得a1.obj
CL a2.c -c 得a2.obj
CL a1.obj a2.obj 得 a1.exe
如果 a2.c 不是你自己写的,a2.obj 是编译器带的. a2.obj 就叫库。
CL a1.obj 链接系统库就得 a1.exe
以上是简单说法。实际上的库有的是obj,有的是可执行共享码。初学者可以不必理会它。
热心网友 时间:2023-09-18 16:40
链接属性一共有3种:external(外部)、internal(内部)和none(无)。
1、没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作不同的实体。
2、属于internal链接属性的标识符在同一个源文件内的所有声明中指同一个实体,但位于不同源文件的多个声明则属于不同的实体。使用static关键字来声明一个internal类型的标识符。static只对缺省链接属性为external的声明才有改变链接属性的效果。static用于声明局部变量时,是使这个变量成为静态变量,就是这个变量在程序的整个运行过程中总是存在的,直到程序结束。
3、属于external链接属性的标识符无论声明多少次、位于几个源文件都表示同一个实体。当extern关键字用于源文件中一个标识符的第1次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会更改由第1次声明所指定的链接属性。