标签:
Highlight:
1. 带参数的宏 宏函数
2. gcc 可以对每个.c 文件单独编译
3. 头文件
4. 全局变量extern
5. Makefile写法
1. 带参数的宏 宏函数
可以传递类型
#include <stdio.h> #define SWAP(T,x,y){T t=x; x=y; y=t;} // 带参数宏 #define MAX(x,y) (x<y?y:x) // 宏函数 int main() { int a =10, b=20; double c =12.3, d=45.6; SWAP(int, a,b); SWAP(double, c, d); printf("a=%d,b=%d\n",a,b); printf("c=%g,d=%g\n",c,d); printf("%d\n", MAX(a,b)); getchar(); return 0; }
2. gcc 可以对每个.c 文件单独编译
命令 gcc -c xxx.c --> 编译之后可以得到一个.o为扩展名的目标文件
当所有目标文件都得到后可以使用gcc命令把他们合并。
3. 头文件
头文件使用条件编译避免被同一个源文件多次包含,在头文件readInt()中
1 #ifndef __READINT_H__ 2 #define __READINT_H__ 3 int readInt(); 4 #endif //__READINT_H__
4. 全局变量extern
如果写多文件程序中需要使用全局变量在多文件中共享, 一个文件定义,其他文件中用extern。
extern关键字表示变量在其他文件中声明的,这个文件只是要使用这个变量。
static变量修饰过的 只能在当前文件里使用。
5. Makefile写法
readInt.c
1 #include <stdio.h> 2 #include "readInt.h" 3 4 int jie_guo; 5 int readInt(){ 6 int shu_zi=0; 7 while(!scanf("%d",&shu_zi)) 8 { 9 scanf("%*[^\n]"); 10 scanf("%*c"); 11 printf("please enter one number:"); 12 } 13 scanf("%*[^\n]"); 14 scanf("%*c"); 15 jie_guo=shu_zi; 16 //return shu_zi; 17 }
readInt.h
1 #ifndef __READINT_H__ 2 #define __READINT_H__ 3 int jie_guo; 4 int readInt(); 5 #endif //__READINT_H__
mutilfiles.c
1 #include <stdio.h> 2 #include "readInt.h" 25 int main() 26 { 27 int shu_zi=0; 28 readInt(); 29 printf("the number is: %d\n", jie_guo); 35 return 0; 36 }
makefile 可以写成:
1 mutilfiles : mutilfiles.c readInt.c readInt.h 2 gcc -c readInt.c 3 gcc -c mutilfiles.c 4 gcc mutilfiles.o readInt.o -o mutilfiles
或者分散成每个task
1 mutilfiles : readInt.o mutilfiles.o readInt.h 2 gcc readInt.o mutilfiles.o readInt.h -o mutilfiles 3 4 readInt.o : readInt.c readInt.h 5 gcc -c readInt.c 6 7 mutilfiles.o : mutilfiles.c readInt.h 8 gcc -c mutilfiles.c 9 10 clean : 11 rm *.o
标签:
原文地址:http://www.cnblogs.com/wg934/p/3917515.html