C语言定义一个头文件的格式和引用它的方法 C语言中定义头文件和函数调用有什么区别和联系?

c\u8bed\u8a00\u5728\u5934\u6587\u4ef6\u4e2d\u5982\u4f55\u5f15\u7528\u53e6\u4e00\u4e2a\u5934\u6587\u4ef6\u4e2d\u7684\u51fd\u6570

1\u3001\u9996\u5148\u5efa\u5934\u6587\u4ef6\u662f\u4e3a\u4e86\u58f0\u660ec\u6587\u4ef6\u4e2d\u7684\u51fd\u6570\uff0c\u4ee5\u53ca\u5305\u62ec\u5b8f\u5b9a\u4e49\u3002\u5efa\u7acb\u5934\u6587\u4ef6\u8981\u6709\u5bf9\u5e94\u7684c\u6587\u4ef6\u3002

2\u3001\u8981\u5199\u5934\u6587\u4ef6\u9996\u5148\u8981\u5efa\u4e00\u4e2a.h\u6587\u4ef6\u3002

3\u3001\u6253\u5f00h\u6587\u4ef6\uff0c\u8fdb\u884c\u7f16\u8f91\u3002\u5efa\u7acb\u5934\u6587\u4ef6\u662f\u6709\u4e00\u5b9a\u6b65\u9aa4\u7684\u3002\u8981\u7528\u5230#ifndef\u3002\u3002\u3002#define\u3002\u3002\u3002\u3002#endif\u3002\u8fd9\u662f\u4e3a\u4e86\u907f\u514d\u91cd\u590d\u5b9a\u4e49\u3002

4\u3001#ifndef\u540e\u9762\u8981\u5199\u7684\u662f\u5934\u6587\u4ef6\u540d\u79f0\u7684\u5927\u5199\u3002\u4f8b\u5982\uff1atest.h\u8981\u5199\u6210__TEST_H__\u3002\u524d\u9762\u4e0e\u540e\u9762\u662f\u4e24\u4e2a\u4e0b\u5212\u7ebf\u3002\u5b57\u6bcd\u7528\u5927\u5199\u3002

5\u3001\u7136\u540e\u5728define\u4e0eendif\u4e2d\u95f4\u58f0\u660e\u51fd\u6570\u540d\uff0c\u8bb0\u5f97\u5199\u5192\u53f7\u3002

6\u3001\u7136\u540e\u5728main\u6587\u4ef6\u4e2d\u5199\u4e0ainclude\u8fd9\u4e2a\u5934\u6587\u4ef6\uff0c\u5c31\u53ef\u4ee5\u8c03\u7528\u4e86\u3002

7\u3001\u6700\u540e\u7f16\u8bd1\uff0c\u8fd0\u884c\uff0c\u5c31\u5b8c\u6210\u4e86\u3002

\u6ca1\u6709\u5fc5\u7136\u8054\u7cfb\u3002
\u51fd\u6570\u540d\u79f0\u4f5c\u4e3a\u4e00\u4e2a\u540d\u79f0\uff0c\u5fc5\u987b\u5148\u58f0\u660e\u540e\u5f15\u7528\uff08\u51fd\u6570\u8c03\u7528\u8868\u8fbe\u5f0f\u662f\u5f15\u7528\u51fd\u6570\u540d\u79f0\u7684\u6700\u5e38\u89c1\u60c5\u51b5\uff09\u3002\u51fd\u6570\u5b9a\u4e49\u4e2d\u5305\u542b\u4e86\u51fd\u6570\u58f0\u660e\u3002\u5982\u679c\u6ca1\u6709\u5728\u8c03\u7528\u524d\u81ea\u884c\u5b9a\u4e49\uff08\u4f8b\u5982\u5b9a\u4e49\u5728\u5916\u90e8\u5e93\u6587\u4ef6\u4e2d\uff09\uff0c\u90a3\u4e48\u9700\u8981\u5728\u8c03\u7528\u524d\u52a0\u4e0a\u58f0\u660e\uff0c\u5373\u51fd\u6570\u5934\u52a0\u5206\u53f7\u7684\u5f62\u5f0f\uff08\u5f62\u5f0f\u53c2\u6570\u540d\u88ab\u7f16\u8bd1\u5668\u5ffd\u7565\uff0c\u56e0\u6b64\u53ef\u7701\u7565\uff09\u3002\u5f53\u591a\u4e2a\u6e90\u6587\u4ef6\u53ef\u80fd\u8981\u7528\u5230\u516c\u5171\u7684\u58f0\u660e\u65f6\uff0c\u53ef\u4ee5\u548c\u5b8f\u5b9a\u4e49\u7b49\u4ee3\u7801\u4e00\u8d77\u5199\u8fdb\u5934\u6587\u4ef6\u3002\u5934\u6587\u4ef6\u5305\u542b\u662f\u7b80\u5355\u7684\u6587\u672c\u66ff\u6362\uff0c\u5373\u7528\u5934\u6587\u4ef6\u7684\u5185\u5bb9\u4ee3\u66ff#include\u6240\u5728\u884c\u3002\u8fd9\u6837\u5728\u4e0d\u540c\u7684\u6e90\u6587\u4ef6\u4e2d\u53ea\u8981\u7528\u4e00\u6761#include\u5c31\u53ef\u4ee5\u58f0\u660e\u591a\u4e2a\u51fd\u6570\u4e86\u3002\u4f46\u662f\u53cd\u706b\u6765\uff0c\u53ea\u7528\u6700\u539f\u59cb\u7684\u58f0\u660e\u800c\u4e0d\u7528\u5934\u6587\u4ef6\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u53ea\u662f\u6bd4\u8f83\u9ebb\u70e6\u800c\u5df2\u3002
\u5bf9\u4e8eC\u6807\u51c6\u5e93\u7684\u4f7f\u7528\uff0c\u4e00\u822c\u63a8\u8350\u5305\u542b\u5934\u6587\u4ef6\u800c\u4e0d\u662f\u624b\u52a8\u4e66\u5199\u58f0\u660e\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u770b\u8d77\u6765\u662f\u540d\u79f0\u7684\u51fd\u6570\u53ef\u80fd\u4e0d\u4e00\u5b9a\u662f\u51fd\u6570\uff0c\u6709\u53ef\u80fd\u662f\u5b8f\uff0c\u4f9d\u8d56\u6027\u6bd4\u8f83\u590d\u6742\u3002
====
[\u539f\u521b\u56de\u7b54\u56e2]

扩展名为.h的文件,在C语言中被称为header file, 也就是头文件。

头文件的数据格式就是普通的文本文件,可以通过新建文本文件(txt),再把扩展名改为.h的方式创建,在此不赘述。


一、头文件内容格式。

头文件内容并没有固定的格式要求,不过一般为防止嵌套引用给编译器带来死锁或者没必要的开销,一般约定整个头文件中所有内容在一个条件编译下,即如下格式:

#ifndef 宏名

#define 宏名

//头文件主体

#endif

这样可以保证一个头文件在一个源文件中最多只被引用一次。为避免宏名重复,宏名一般由头文件名转换而来,如果头文件名是xxx.h,那么宏名一般定义为:

_XXX_H_

即前后各加一个下划线,同时文件名中除数字、字母、下划线以外的字符均转换为下划线(_)。


头文件主体中内容同样没有做强制约定,可以出现在源文件(.c)中的任何代码均可以放在头文件中。不过一般情况下可以包括以下几种内容:

1 引用其它头文件,格式为

#include <xxx.h>

#include "xxx.h"

二者区别在介绍头文件引用时再详细介绍。

2 定义私有类型。比如

typedef unsigned long U32; //为了简写而给无符号32位整型定义一个新的名字

struct xxx {};

也可以是enum, union等复杂类型。

3 宏定义。比如

#define MAX(a,b) (a>b?a:b)

4 函数声明。比如

void test_function(void);

5 全局变量声明。比如

extern int global_var;

6 如果有一个静态全局变量需要在不同源文件中使用,但各文件之间互不相关。那么可以放在头文件中。如:

static int gs_var = 3;


7 对于支持C99规范的C编译器,还可以把内联函数定义在头文件中。比如

static inline int get_min(int a, int b)
{
    if(a>b) return b;
    return a;
}

以上是常见的头文件中的元素。但实际上头文件中也可以放全局变量的定义,全局函数的实现等。但是头文件中一旦定义了这样的元素,这个头文件在一个工程中只能被一个文件引用,否则编译器会报重复定义的错误。

比如如果有一个规模很大的常量数组,比如一副图片的二进制值,如果把它定义在源文件中,就会显得很冗余,因为并不会经常修改。 这时可以定义在头文件中,只在一个源文件中引用,当有多幅图片需要随时更换时,也可以通过简单的在源文件中修改引用的头文件名达到修改的目的。


二、头文件的引用。

头文件引用的方法其实之前已经大致说过了,在源文件中引用头文件和在头文件中引用的格式是一样的:

#include<xxx.h>或者

#include "xxx.h"

xxx为头文件名。

用<>和""是有一定的区别的。在编译器查找头文件的时候,会在两个区域分别查找。

一个是系统头文件区域,即类似于stdio.h一类的C库函数头文件区。

另一个是自定义头文件区,比如当前目录,以及其它自定义的目录。

用<>时,编译器会先在系统区域查找,然后再查找自定义区域。而用""时则相反。

由于一般并不推荐自定义头文件名与系统头文件名相同(容易引起歧义并难以维护),所以先后顺序并不是太重要,尤其在硬件速度越来越快的今天,使用哪种符号引用头文件已经差别很小了。



如果未定义就定义一个,你弄成如果定义就定义!!!

第一句 改为 #ifndef _CANSHU_H

  • C璇█瀹氫箟涓涓ご鏂囦欢鐨勬牸寮忓拰寮曠敤瀹冪殑鏂规硶
    绛旓細鎵╁睍鍚嶄负.h鐨勬枃浠讹紝鍦–璇█涓绉颁负header file, 涔熷氨鏄ご鏂囦欢銆傚ご鏂囦欢鐨勬暟鎹牸寮忓氨鏄櫘閫氱殑鏂囨湰鏂囦欢锛屽彲浠ラ氳繃鏂板缓鏂囨湰鏂囦欢(txt)锛屽啀鎶婃墿灞曞悕鏀逛负.h鐨勬柟寮忓垱寤猴紝鍦ㄦ涓嶈禈杩般備竴銆佸ご鏂囦欢鍐呭鏍煎紡銆傚ご鏂囦欢鍐呭骞舵病鏈夊浐瀹氱殑鏍煎紡瑕佹眰锛屼笉杩囦竴鑸负闃叉宓屽寮曠敤缁欑紪璇戝櫒甯︽潵姝婚攣鎴栬呮病蹇呰鐨勫紑閿锛屼竴鑸害瀹...
  • c璇█澶存枃浠鎬庝箞鍐欏憖?
    绛旓細(1)澶存枃浠跺紑澶村鐨勭増鏉冨拰鐗堟湰澹版槑锛(2)棰勫鐞嗗潡锛(3)inline鍑芥暟鐨瀹氫箟锛(4)鍑芥暟鍜岀被缁撴瀯澹版槑绛夈傚湪澶存枃浠朵腑锛岀敤ifndef/define/endif缁撴瀯浜х敓棰勫鐞嗗潡锛岀敤#include鏍煎紡鏉ュ紩鐢ㄥ簱鐨勫ご鏂囦欢銆澶存枃浠剁殑杩欑缁撴瀯锛屾槸鍒╃敤C璇█杩涜寮鍙戣蒋浠舵墍閫氬父鍏峰鐨勶紝灞炰簬鍏湁鐭ヨ瘑銆備紶缁 C++锛...
  • c璇█涓濡備綍瀹氫箟,娣诲姞澶存枃浠
    绛旓細C璇█澶存枃浠甯哥敤鏍煎紡濡備笅锛歩fndef LABEL#define LABEL//浠g爜閮ㄥ垎#endif鍏朵腑锛孡ABEL 涓轰竴涓敮涓鐨勬爣鍙凤紝鍛藉悕瑙勫垯璺熷彉閲忕殑鍛藉悕瑙勫垯涓鏍枫傚父鏍规嵁瀹冩墍鍦ㄧ殑澶存枃浠跺悕鏉ュ懡鍚嶃備妇渚嬪涓嬶細// 澶存枃浠秇ardware.h#ifndef __HARDWARE_H__#define __HARDWARE_H__#include<stdio.h>int add2(int a, int b) /...
  • 濡備綍鍒朵綔C璇█澶存枃浠
    绛旓細1銆佺涓姝ワ紝澶存枃浠琚瀯寤轰负鍦c鏂囦欢涓0鏄庡嚱鏁帮紝骞跺寘鎷畯瀹氫箟锛 蹇呴』鏈夌浉搴旂殑c鏂囦欢鎵嶈兘鍒涘缓澶存枃浠讹紝瑙佷笅鍥撅紝杞埌涓嬮潰鐨勬楠ゃ2銆佺浜屾锛屽畬鎴愪笂杩版楠ゅ悗锛岃缂栧啓澶存枃浠讹紝鍒涘缓涓涓.h鏂囦欢锛岃涓嬪浘锛岃浆鍒颁笅闈㈢殑姝ラ銆3銆佺涓夋锛屽畬鎴愪笂杩版楠ゅ悗锛屾墦寮h鏂囦欢杩涜缂栬緫锛屾寜鐓ф楠ゅ彲浠ュ垱寤哄ご鏂囦欢锛岃涓嬪浘锛岃浆...
  • c璇█涓殑澶存枃浠
    绛旓細C++/C绋嬪簭鐨勫ご鏂囦欢浠".h"涓哄悗缂銆備互涓嬫槸鍋囪鍚嶇О涓篻raphics.h鐨勫ご鏂囦欢:澶存枃浠朵竴鑸敱鍥涢儴鍒嗗唴瀹圭粍鎴愶細锛1锛夊ご鏂囦欢寮澶村鐨勭増鏉冨拰鐗堟湰澹版槑銆傦紙2锛夐澶勭悊鍧椼傦紙3锛塱nline鍑芥暟鐨瀹氫箟銆傦紙4锛夊嚱鏁板拰绫荤粨鏋勫0鏄庣瓑銆傚湪澶存枃浠朵腑锛岀敤 ifndef/define/endif缁撴瀯浜х敓棰勫鐞嗗潡锛岀敤 #include 鏍煎紡鏉ュ紩鐢ㄥ簱鐨勫ご鏂囦欢...
  • 鍦c璇█涓,濡備綍鑷瀹氫箟澶存枃浠
    绛旓細澶存枃浠鏄笉缂栬瘧鐨勶紝鍥犱负C璇█缂栬瘧杩囩▼涔嬪墠鏈変釜棰勭紪璇戣繃绋嬨傚湪杩欎釜杩囩▼涓敤澶存枃浠朵腑鐨勫唴瀹规浛鎹㈡簮鏂囦欢涓#include鈥濆懡浠わ紝鎵浠ュ湪缂栬瘧鍣ㄧ湅鏉ワ紝娌℃湁澶存枃浠讹紝鍙湁婧愭枃浠躲傞缂栬瘧杩囩▼杩樺寘鎷潯浠剁紪璇戙傚ご鏂囦欢涓轰簡闃叉琚噸澶嶅寘鍚紝閫氬父鐨勬牸寮鏄細/* MyHead.h */ ifndef _MYHEAD_H_define _MYHEAD_H_锛堣繖閲...
  • C璇█涓鎬庢牱缂栧啓澶存枃浠??
    绛旓細澶存枃浠鍐呭 define PI 3.14159 float mianji(float r){ return PI*r*r;} 淇濆瓨鍚嶇О涓簓uanmianji.h 瀹炵幇鏂囦欢鍐呭 include <stdio.h> include "yuanmianji.h"int main(void){ float r;printf("璇疯緭鍏ュ渾鐨勫崐寰: ");scanf("%f",&r);printf("鍦嗙殑闈㈢Н鏄: %.2f\n",mianji(r));return 0...
  • C璇█鐨勫ご鏂囦欢鏄粈涔?
    绛旓細include <stdio.h> include<math.h> int main(){ int n;unsigned long long sum;printf("璇疯緭鍏ヨ璁$畻鐨凬姝ゆ柟锛");scanf("%d",&n);sum=pow(2,n);printf("%llu",sum);return 0;}
  • C璇█濡備綍鍐澶存枃浠?
    绛旓細/*澶存枃浠鍐呭锛屽亣璁惧悕瀛楁槸test.h*/ ifndef MYHEADFILE define MYHEADFILE void InitInterpolation();void Draw_Border();void Draw_Background();void Draw_Gray();endif /*浠ヤ笅鏄痶est.c鐨鍐呭*/ include "test.h"/*鍚庨潰灏辨槸鍚勪釜鍑芥暟鐨勫疄鐜*/ 鍚岄」鐩腑鍏朵粬鍚勪釜鏂囦欢闇瑕佷娇鐢ㄨ繖浜涘嚱鏁版椂鍙渶瑕佷笅闈...
  • c璇█澶存枃浠
    绛旓細1澶存枃浠跺紑澶村鐨勭増鏉冨拰鐗堟湰澹版槑2棰勫鐞嗗潡3inline鍑芥暟鐨瀹氫箟4鍑芥暟鍜岀被缁撴瀯澹版槑绛夊湪澶存枃浠朵腑锛岀敤ifndefdefineendif缁撴瀯浜х敓棰勫鐞嗗潡锛岀敤#include鏍煎紡鏉ュ紩鐢ㄥ簱鐨勫ご鏂囦欢澶存枃浠剁殑杩欑缁撴瀯锛屾槸鍒╃敤C璇█锛泂tdioh锛屽寘鍚爣鍑嗚緭鍏ヨ緭鍑猴紝鍚戝睆骞曠殑杈撳嚭锛屾枃浠剁殑璇诲啓stdlibh锛屾爣鍑嗗簱鏂囦欢锛屽寘鍚搷浣滅郴缁熷懡浠わ紝闅忔満鏁帮紝鏃堕棿...
  • 扩展阅读:红头文件模板免费下载 ... 红头文件格式模板图片 ... c++常用头文件大全 ... 红头文件电子版 ... c语言开头固定格式 ... 正规红头文件排版格式 ... 红头文件的制作步骤 ... c语言自建头文件 ... c语言如何自己写头文件 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网