打印

关于条件编译#ifdef endif的疑问

[复制链接]
792|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XLDZZ|  楼主 | 2017-3-29 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜鸟有个疑问 还请各位大神看看问题是这样的

    我在key.h中定义了一个结构体变量
    typedef struct
     {
       u8 key_cnt;
      u8 key_flag;
     }key_t;

   然后在 main.c key.c test.c中包含这个文件 在不同的c文件里创建不同的变量
   编译器报警,提示多重定义.
   于是在key.h中加入条件编译
   #ifdef key
   #define key
      typedef struct
     {
       u8 key_cnt;
      u8 key_flag;
     }key_t;
  #endif
这样就解决问题了

我的问题是 main key c等文件包含了key.h文件后,按照编译原理首先要把key.h中的文件
打开后放置在各个c文件里,这样不就是各个c文件里多有
   #ifdef key
   #define key
      typedef struct
     {
       u8 key_cnt;
      u8 key_flag;
     }key_t;
  #endif

这个内容 那不是又多重定义了吗 怎么会又解决了呢
那么 条件编译到底是什么作用呢

相关帖子

沙发
5992230| | 2017-3-29 15:24 | 只看该作者
key 在哪里定义的?

使用特权

评论回复
板凳
nethopper| | 2017-3-29 17:09 | 只看该作者
在H文件中用:
typedef struct key_t
{
       u8 key_cnt;
       u8 key_flag;
} key_t


这样,在各C文件中用以下两法之一来定义变量应该都行:
struct key_t  key_t1, key_t2, key_t3;

key_t key_t1, key_t2, key_t3;

使用特权

评论回复
地板
zyj9490| | 2017-3-29 20:20 | 只看该作者
第一个文件时,产生一个KEY的宏定义,并且产生KEY_T这个数据类型 ,再碰到.H时,此时已有KEY,不会再条件编译的部分。也就是不会再产生变量及数据类型。不明白编译过程导致的。

使用特权

评论回复
5
@若水| | 2017-3-30 11:06 | 只看该作者
#ifndef key
   #define key
      typedef struct
     {
       u8 key_cnt;
      u8 key_flag;
     }key_t;
  #endif

使用特权

评论回复
6
@若水| | 2017-3-30 11:06 | 只看该作者
看5楼,你打的是不是少了个n?

使用特权

评论回复
7
XLDZZ|  楼主 | 2017-5-22 15:27 | 只看该作者
感谢各位 的确是使用#ifndef 这样才行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

182

帖子

0

粉丝