请教一个简单的C语言问题
我一直用大飞,现在在弄些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'C语言就是这样的,不能重复定义。 hfshen 发表于 2021-2-20 11:14
C语言就是这样的,不能重复定义。
那怎么解决呀,因为我不同的功能都需要这个定义,难道把包含的头文件A.h重复写一遍?这不符模块化合原理呀。
我记得好像有宏ifndef....先判断,再定义 allen3371 发表于 2021-2-20 11:23
我记得好像有宏ifndef....先判断,再定义
正确。
刚网上找的,说是头文件被重复引用造成,自己加#ifndef......#deinfe......#endif,把typedef放在那里面,也就是谁先引用,谁先占掉define标识符,后续的就不包含这个定义,果然有效,我查!!C语言就是*! 除了undefine 还可以:在B.h里面不要#include <A.h> dstboxu 发表于 2021-2-20 11:34
除了undefine 还可以:在B.h里面不要#include
ifndef
在430和NEC的C中,没有问题啊~
比如在typedef.h中定义了一个结构类型TIME,然后在其他.C文件中#include typedef.h,没有报错。
再在def.h中定义一个TIME的结构变量,然后在其他.C文件中#include def.h
引用TIME中的变量时,也无报错。 C语言的头文件一般要做防重复包含的处理,入a.h,里面会使用#ifndef __A_H__#define __A_H__#endif,同一个宏不应该在多个头文件里重复定义,如果是历史遗留问题,不得不兼容,可以考虑使用#ifdef XXX#undef XXX #endif#define XXX 你这个问题只要在头文件加上防重复包含的处理就可以了 去参考其它的glibc或者任何正常的头文件的前面三行有效代码, 都是#ifndef __xxx_H #define __xxx_H ,就是用这个控制的. 宏不可以重复定义,函数在不同子程序里的重用话,用extern就可以了。
页:
[1]