zhan2905 发表于 2013-4-22 11:03:30

求教 有关 预编译的 问题!

本帖最后由 zhan2905 于 2013-4-22 11:05 编辑

#ifndef __Can_BUS_H__ ------------------------------1
#define __Can_BUS_H__-------------------------------2         
#undefEXTERN         -------------------------------- 3                     
#ifndef __Can_BUS_C__ --------------------------------4         
#define EXTERN extern--------------------------------5                        
#else                           --------------------------------6               
#define EXTERN            --------------------------------7                     
#endif                        --------------------------------8

#define
...
内容
...

#undef__Can_BUS_C__         
#endif                                       

我的问题是 在 第七行
#defineEXTERN
怎么就只有EXTERN 后面要替换的东西呢 ?

接着我就 这样搞了下第七行 我改成
#defineEXTERN       extern   跟第五行一样

编译一下 出现了 警告

然后我把他屏蔽掉结果出现了 错误

求解

绿茶山人 发表于 2013-4-22 14:09:12

本帖最后由 绿茶山人 于 2013-4-22 14:24 编辑

#ifndef __Can_BUS_C__ --------------------------------4         
#define EXTERN extern--------------------------------5                        
#else                           --------------------------------6               
#define EXTERN            --------------------------------7   
第五行和第七行任何时候只有其中一行是有效的。第七行那样定义是表示你有EXTERN 这个宏,其他程序可能有#ifndef EXTERN 或者#ifdef EXTERN这样的条件编译,其次为了代码的一致性,例如在一个.c文件中有这样一句代码 EXTERN char idata temp; 如果你定义了第七句,根据条件编译的不同结果,这句代码可以是extern char idata temp;或者是char idata temp;这样的好处是你不用去修改改.c文件.

zhan2905 发表于 2013-4-22 16:05:42

哦~~ 其实第七行就是定义一个 空的

他的目的是 给 下文或其他.c文件 中的 #ifndef 和 #ifdef做一个 对应的

这也是预编译 的一个优势之处
页: [1]
查看完整版本: 求教 有关 预编译的 问题!