手电大家谈-手电筒爱好者之家

 找回密码
 注册成为会员,享受更多功能。

QQ登录

只需一步,快速开始

只需一步,快速开始

搜索
查看: 2776|回复: 12

[其他DIY] 请教一个简单的C语言问题

[复制链接]
  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

    发表于 2021-2-20 11:02 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有账号?注册成为会员,享受更多功能。

    x
    我一直用大飞,现在在弄些AVR,只有C了,涉及到一些问题。比如有三个头文件A.h,B.h,C.h,我在A.h里面定义了一个结构typedef struct {....(省略)}BIT_FILED;我在B.h里面#include <A.h>,在C.h里面也有#include <A.h>,我查!!!AVR STUDIO 根咱杠上了,说BIT_FILED相互抵触,conflicting types for 'BIT_FIELD'
    回复 dsu_marcocopyright:copyright

    使用道具 举报

  • TA的每日心情
    开心
    2024-9-30 08:09
  • 签到天数: 2268 天

    [LV.Master]伴坛终老

    发表于 2021-2-20 11:14 | 显示全部楼层
    C语言就是这样的,不能重复定义。

    点评

    那怎么解决呀,因为我不同的功能都需要这个定义,难道把包含的头文件A.h重复写一遍?这不符模块化合原理呀。  详情 回复 发表于 2021-2-20 11:21
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-20 11:21 | 显示全部楼层
    hfshen 发表于 2021-2-20 11:14
    C语言就是这样的,不能重复定义。

    那怎么解决呀,因为我不同的功能都需要这个定义,难道把包含的头文件A.h重复写一遍?这不符模块化合原理呀。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-2-20 11:23 | 显示全部楼层
    我记得好像有宏ifndef....先判断,再定义

    点评

    正确。  详情 回复 发表于 2021-2-20 11:25
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-2-20 11:25 | 显示全部楼层
    allen3371 发表于 2021-2-20 11:23
    我记得好像有宏ifndef....先判断,再定义

    正确。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-20 11:33 | 显示全部楼层
    刚网上找的,说是头文件被重复引用造成,自己加#ifndef......#deinfe......#endif,把typedef放在那里面,也就是谁先引用,谁先占掉define标识符,后续的就不包含这个定义,果然有效,我查!!C语言就是*!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-20 16:21
  • 签到天数: 249 天

    [LV.8]以坛为家I

    发表于 2021-2-20 11:34 | 显示全部楼层
    除了undefine 还可以:在B.h里面不要#include <A.h>

    点评

    ifndef[/backcolor]  详情 回复 发表于 2021-2-20 11:36
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-20 16:21
  • 签到天数: 249 天

    [LV.8]以坛为家I

    发表于 2021-2-20 11:36 | 显示全部楼层
    dstboxu 发表于 2021-2-20 11:34
    除了undefine 还可以:在B.h里面不要#include

    ifndef
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-7-4 12:33
  • 签到天数: 2553 天

    [LV.Master]伴坛终老

    发表于 2021-2-20 15:55 | 显示全部楼层
    在430和NEC的C中,没有问题啊~
    比如在typedef.h中定义了一个结构类型TIME,然后在其他.C文件中#include typedef.h,没有报错。
    再在def.h中定义一个TIME的结构变量,然后在其他.C文件中#include def.h
    引用TIME中的变量时,也无报错。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-2-20 22:01 来自手机 | 显示全部楼层
    C语言的头文件一般要做防重复包含的处理,入a.h,里面会使用#ifndef __A_H__  #define __A_H__  #endif,同一个宏不应该在多个头文件里重复定义,如果是历史遗留问题,不得不兼容,可以考虑使用#ifdef XXX  #undef XXX #endif  #define XXX
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-2-20 22:02 来自手机 | 显示全部楼层
    你这个问题只要在头文件加上防重复包含的处理就可以了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-29 11:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2021-2-21 09:38 | 显示全部楼层
    去参考其它的glibc或者任何正常的头文件的前面三行有效代码, 都是#ifndef __xxx_H #define __xxx_H ,就是用这个控制的.
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-2-25 14:25 | 显示全部楼层
    宏不可以重复定义,函数在不同子程序里的重用话,用extern就可以了。
    回复

    使用道具 举报

    本版积分规则

    小黑屋|手机版|Archiver|论坛自带搜索|下载论坛app|手电大家谈-手电筒爱好者之家 ( 备案序号:鲁ICP备05002565号 )
    以上言论纯属个人观点,与手电大家谈立场无关。
    最佳浏览模式:1920*1080


    GMT+8, 2024-10-5 15:35 , Processed in 0.153078 second(s), 49 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表