C语言头文件中定义结构体的问题 C语言是在.h中定义结构体还是在.c中定义?
\u4e3a\u4f55c\u8bed\u8a00\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7684\u7ed3\u6784\u4f53\u663e\u793a\u672a\u80fd\u5b9a\u4e49\uff1f\u4f60\u867d\u7136\u5b9a\u4e49\u4e86\uff0c\u4f46\u662f\u7ed3\u6784\u4f53\u5728\u4e0b\u9762\uff0c\u6240\u4ee5\u4f60\u53ea\u80fd\u628a\u62a5\u9519\u7684\u90a3\u53e5\u8bdd\u79fb\u5230\u7ed3\u6784\u4f53\u5b9a\u4e49\u7684\u4e0b\u9762\u624d\u53ef\u4ee5
\u7ed3\u6784\u4f53\u662f\u4e00\u79cd\u7c7b\u578b\uff0c\u5b9a\u4e49\u4e00\u79cd\u7c7b\u578b\u6700\u597d\u662f\u5728.h\u5b9a\u4e49\uff0c\u8fd9\u6837\u5176\u4ed6\u5730\u65b9\u60f3\u7528\u8fd9\u4e2a\u7ed3\u6784\u4f53\uff0c\u53ea\u9700\u5305\u542b\u6b64.h\u6587\u4ef6\u5373\u53ef\uff0c\u4f46\u662f\u5b9a\u4e49\u7ed3\u6784\u4f53\u53d8\u91cf\u7684\u8bdd\uff0c\u6700\u597d\u8f7d.c\u6587\u4ef6\u5b9a\u4e49\uff08\u4e3a\u4e86\u9632\u6b62\u91cd\u590d\u5b9a\u4e49\uff0c\u6240\u4ee5\u4e0d\u5efa\u8bae\u5728c\u6587\u4ef6\u4e2d\u5b9a\u4e49\u53d8\u91cf\uff09\uff0c\u7136\u540e..h\u91cc\u9762extern\u58f0\u660e\uff0c\u5176\u4ed6.c\u6587\u4ef6\u60f3\u7528\u53ea\u9700\u5305\u542b\u90a3\u4e2a.h\u6587\u4ef6\u5373\u53ef
C语言程序设计中,为防止头文件在同一编译单元被重复引用,常引入#ifndef宏来进行保护,如:头文件my_head.h
#ifndef _MY_HEAD_H_ //如果没有定义宏_MY_HEAD_H_
#define _MY_HEAD_H_ //则,定义该宏名
//以下是被保护的代码区
//进行相应的全局变量和结构体类型定义
typedef struct stu {
int a;
int b;
} STU ;
#endif //宏判断结束
这样,当整个代码中,多次引用这个my_head.h时,只有一次是生效的,系统编译时,如果检查宏_MY_HEAD_H_ 已经定义,就不会再进入被保护的代码区了。
PS: 宏名,一般是与头文件名相同,只是把字母全大写,前后加上下划线(_)
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明。
(2)预处理块。
(3)函数和类结构声明等。
它的作用:
(1)通过头文件来调用库功能。
(2)头文件能加强类型安全检查。
用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索),到include子目录下搜索给出的文件,并把它嵌入到当前文件中 。
用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索),在当前目录中进行搜索,如果找不到,再按标准方式进行搜索 ,这种方式适用于用户自己建立的头文件。
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中
是ifndef把
绛旓細C璇█绋嬪簭璁捐涓紝涓洪槻姝澶存枃浠鍦ㄥ悓涓缂栬瘧鍗曞厓琚噸澶嶅紩鐢紝甯稿紩鍏#ifndef瀹忔潵杩涜淇濇姢锛屽锛氬ご鏂囦欢my_head.h ifndef _MY_HEAD_H_ //濡傛灉娌℃湁瀹氫箟瀹廮MY_HEAD_H_#define _MY_HEAD_H_ //鍒欙紝瀹氫箟璇ュ畯鍚//浠ヤ笅鏄淇濇姢鐨勪唬鐮佸尯//杩涜鐩稿簲鐨勫叏灞鍙橀噺鍜缁撴瀯浣绫诲瀷瀹氫箟typedef struct stu { ...
绛旓細锛1锛夎〃绀烘満鏋勫唴浣嶅煙鐨勫畾涔锛堝嵆璇ュ彉閲忓崰鍑犱釜bit绌洪棿锛塼ypedef struct _XXX{ unsigned char a:4;unsigned char c;} ;
绛旓細int age; float math,eng,chi;}s[N];int main(){int i,t=0;float ave[N],max;printf("濮撳悕 瀛﹀彿 鎬у埆 骞撮緞 鏁板 鑻辫 璇枃\n");for(i=0;i<N;i++){//scanf("%s%d%s%d%f%f%f",&s[i].name,&s[i].num,&s[i].sex,&s[i].age,&s[i].math,&s[i].eng,&s[...
绛旓細struct a {...}b;鎴戞墦銆傘傘傜殑鍦版柟琛ㄧず浣犲彲浠ュ湪閭i噷娣诲姞鎵鏈夌殑鏁版嵁褰㈠紡鐨勫畾涔锛屾瘮濡傦紝int a锛沜har a[10];绛夌瓑锛涜宐琛ㄧず鍙橀噺鍚嶃傚氨濡傚悓int a鐨刟涓鏍凤紝鍙槸涓涓彉閲忔爣绀虹锛屼粬灏辨槸涓涓缁撴瀯浣鍙橀噺浜嗐傚綋浣犱娇鐢╰ypedef浣匡紝瀹冭〃绀虹殑鏄灇涓剧被鍨嬶紝鍔熻兘濡傚悓瀹忓畾涔変竴鏍凤紝浣跨敤浠栫殑鏃跺欐柟娉曞涓嬶細棣栧厛 鍐...
绛旓細浣犺櫧鐒跺畾涔変簡锛屼絾鏄粨鏋勪綋鍦ㄤ笅闈紝鎵浠ヤ綘鍙兘鎶婃姤閿欑殑閭e彞璇濈Щ鍒缁撴瀯浣撳畾涔夌殑涓嬮潰鎵嶅彲浠
绛旓細1銆乻tutype涓嶆槸鍙橀噺鍚嶏紝鑰屾槸瀹氫箟涓涓猻truct stu缁撴瀯浣撴柊鐨勫埆鍚嶃備緥濡傝瀹氫箟涓涓缁撴瀯浣撳彉閲忓彲浠ユ湁浠ヤ笅涓ょ瀹氫箟鏂规硶锛氾紙1锛塻truct stu stu_t; 锛2锛塻tutype stu_t; 杩欎袱绉嶆柟娉曞叾瀹炴槸涓鏍风殑銆2銆佸鏋滆繖涔瀹氫箟缁撴瀯浣锛堝幓鎺塼ypedef锛塻truct stu{ int a;float b;}stutype;閭d箞D灏辨槸瀵圭殑 ...
绛旓細涓嶆槸缁撴瀯浣鏈韩鐨勫畾涔鎶ラ敊, 鑰屾槸person鍙橀噺琚噸瀹氫箟浜, 鍙互鑰冭檻 鍦澶存枃浠朵腑涓嶈繘琛屽彉閲忓畾涔,鑰屽皢鍙橀噺寮璁剧Щ鍔ㄥ埌.c鏂囦欢涓
绛旓細include<stdio.h>#include<string.h>typedef struct Student{ char num[24]; char name[24]; int score[3];} stu;int main(){ int n; while(scanf("%d",&n)!=EOF) { stu a; int i; int max=0; char num[24]; char name[24]; int score[...
绛旓細鎮ㄥソ锛屾偍鐨勯棶棰鏄笉鏄湁鐐圭暐澶氾紝涓嬮潰涓涓涓烘偍瑙g瓟锛1銆乼ypedefchar**HuffmanCode瀹為檯涓婃槸typedef(char*)*HuffmanCode銆傚啓鎴愯繖绉嶅舰寮忔洿濂界悊瑙o紝**HuffmanCode鏄寚鍚戞寚閽堢殑鎸囬拡锛岃繖閲屼篃鍙互鐞嗚В涓烘槸鎸囧悜瀛楃涓茬殑鎸囬拡锛屽洜涓篶har*瀛楃鏁扮粍鐩稿綋浜庡瓧绗︿覆銆2銆*HuffmanTree琛ㄧず鎸囧悜缁撴瀯浣HTNode鐨勬寚閽堬紝HTNode鏄...
绛旓細c鏂囦欢涓涓.h鏂囦欢 c 2.c 3.c 4.h 杩欎笁涓澶存枃浠閮藉紩鐢4.h include<4.h> 4.h涓畾涔変竴涓缁撴瀯浣绫诲瀷struct test锝涳綕;1.c涓畾涔涓涓缁撴瀯浣撶被鍨嬬殑鍏ㄥ眬鍙橀噺struct test mode;4.h涓璭xtern struct test mode;鍏朵粬.c鏂囦欢灏卞彲浠ョ洿鎺ヤ娇鐢ㄨ繖涓粨鏋勪綋鍙橀噺浜嗭紝骞朵笖鏄叡鐢ㄧ殑 ...