StdC--08 预处理于大型程序


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

 

posted @ 2015-04-26 22:37  wg934  阅读(162)  评论(0编辑  收藏  举报