9头文件与预处理

1、条件编译指令

#if // 如果,#if VER==1

#ifdef // 如果定义了...

#ifndef // 如果没有定义...

#elif // 否则如果...

#else // 否则

#endif // 和#if/#ifdef/#ifndef配对使用

#undef // 取消定义,和#define相反

满足条件(条件表达式的值非零)的代码参加编译,否则不参加编译。

2、头文件卫士

       com.h

       /  \

   net.h  des.h

    /  \  /  \

net.c  main.c des.c

头文件卫士:在xxx.h中

#ifndef _XXX_H

#define _XXX_H

// 头文件代码...

#endif // _XXX_H

防止同一个.h文件被沿着不同路径包含到一个.c文件中产生重定义冲突。

 

一、头文件
第一个:com.h:
#ifndef _COM_H //如果没有定义...
#define _COM_H //就定义...

#include <stdio.h>

typedef struct tag_pack
{
char head[256];
char body[1024];
}pack;
#endif  //与上面#ifndef是成对

第二个:des.h:
#include "com.h"

void add2(pack *p);
void sub2(pack *p);

第三个:net.h
#include "com.h"

void add(pack *p);
void sub(pack *p); 

二、源文件
第一个:des.c
#include "des.h"

void add2(pack *p)
{
  printf("add2两数相加!\n");
}
void sub2(pack *p)
{
  pack t;
  add2(&t);
  printf("sub2两数相减!\n");
}
第二个:net.c
#include "net.h"

void add(pack *p)
{
  printf("addg两数相加!\n");
}

void sub(pack *p)
{
  printf("sub两数相减!\n");
} 
第三个:main.c
#include "net.h"
#include "des.h"

int main()
{
  pack p;
  add(&p);
  sub(&p);
  add2(&p);
  sub2(&p);
  return 0;
}

 

posted @ 2017-09-04 20:18  gd_沐辰  阅读(215)  评论(0编辑  收藏  举报