1、c语言中的宏属于c语言预处理命令,不是c语言的组成部分,也不是c语句;是一种字符串替换操作;使用#define来定义,分为不带参数的宏和带参数的宏。
2、不带参数的宏:#define 标识符 字符串
假如定义:
#define PI 3.1415926
那么以后用到3.1415926的地方写PI就可以了。
3、带参数的宏:#define 标识符(参数表) 字符串
假如定义:
#define PI 3.1415926
#define S(r) PI*r*r
那么以后求圆的面积的时候可以用S(5)形式表示,它表示3.1415926*5*5。
4、多个c语言程序文件的同时使用:(多个同时使用的c文件中只能有一个main()函数)
1)多个c语言程序文件间外部函数的调用:
先用extern声明外部函数,然后调用,例如:
extern prt();//声明一个外部函数prt()
prt();//调用外部函数prt()
2)生成可执行文件的方法:
a、对多个文分别进行编译,然后进行连接生成可执行文件。
b、用#include "文件名"来包含所要的文件,然后一次性编译连接生成可执行文件。
#include
#include "1.c"
int main()
{
extern prt();//声明一个外部函数prt()
prt();//调用外部函数prt()
}
c、在工程中同时打开1.c文件:
#include
int main()
{
extern prt();//声明一个外部函数prt()
prt();//调用外部函数prt()
}
d、1.c文件内容:
void prt()
{
printf("1.c file");
}
p函数在ma.c中定义,而#define TYPE 1在maro.c中,当然无效了
C语言编译器gcc编译过程:先分文件编译,每个文件编译成一个目标程序。最后将目标程序“链接”在一起,形成可执行程序。
注意:只编译.c文件,不编译.h头文件。
在编译ma.c时,先将头文件的内容拷贝过来,变成:
#ifndef TYPE
#define TYPE 2
#endif
void p();
void p() {
int i = TYPE;
printf("%d\n",i);
}
看出来了吗?在编译时是看不到macro.c中定义的那个
#define TYPE 1
因此进入分支:
#define TYPE 2
打印出来的就是2了
如果你想要打印1,可以这样:
1,新增一个头文件:macro.h
2,将#define TYPE 1放到macro.h中
3,ma.h中包含macro.h头文件。