C语言中,定义自定义库函数时该如何写对应的头文件 C语言: 若不包含相应头文件,程序员可以定义与标准库函数同名...

C\u8bed\u8a00\u600e\u4e48\u628a\u81ea\u5b9a\u4e49\u5934\u6587\u4ef6\u6dfb\u52a0\u5230\u51fd\u6570\u5e93\u4e2d

\u4f60\u53ef\u4ee5\u628a\u4f60\u7684\u5934\u6587\u4ef6\u590d\u5236\u5230 stdio.h \u6240\u5728\u7684\u6587\u4ef6\u5939\uff0c\u5e76 \u4fee\u6539 \u7f16\u8bd1\u5668\u81ea\u5e26\u7684 stdio.h\uff0c
\u5728 stdio.h \u7684 \u5c3e\u90e8 \u52a0\u4e00\u53e5 #include \u4f60\u5f00\u53d1\u7684\u5934\u6587\u4ef6\u540d \u5373\u53ef\u3002\u4ee5\u540e\uff0c\u51e1\u4f7f\u7528 stdio.h \u5c31\u81ea\u52a8\u6709\u4e86 \u4f60\u5f00\u53d1\u7684\u5934\u6587\u4ef6\u4e86\u3002
\u8fd9\u4e2a\u64cd\u4f5c\u5f88\u7b80\u5355\uff0c\u4f46\u4f60\u8981\u6709\u7ba1\u7406\u5458\u7279\u6743\uff0c\u624d\u80fd\u4fee\u6539stdio.h\u3002
\u5982\u679c \u53ef\u4ee5\u81ea\u5df1 \u5199 #include ...; \u4f60\u53ef\u4ee5 \u628a\u81ea\u5df1\u5f00\u53d1\u7684 \u5934\u6587\u4ef6\u5199\u5728 \u81ea\u5df1 \u7684 \u4e00\u4e2a\u6587\u4ef6\u5939\u3002\u628a\u81ea\u5df1\u7684\u6587\u4ef6\u5939\u8def\u5f84 \u52a0\u5165\u5230 \u73af\u5883\u53d8\u91cf INCLUDE \u4e2d\u3002\u4f8b\u5982\u6587\u4ef6\u5939\u8def\u5f84\u662f d:\my_head \u7528 \u547d\u4ee4\uff1a
set INCLUDE=%INCLUDE%;d:\my_head
\u5c31\u53ef\u52a0\u5165\u3002 \u4f7f\u7528\u5934\u6587\u4ef6 \u7528 #include
my_some.h \u662f\u4f60\u5f00\u53d1\u7684\u5934\u6587\u4ef6\u4e4b\u4e00\uff0c\u5b58\u653e\u5728 d:\my_head\ \u4e0b\u9762\u3002

\u5f53\u81ea\u5b9a\u4e49\u5c3e\u6570\u4e0e\u5e93\u51fd\u6570\u540c\u540d\u65f6\uff0c\u4e00\u822c\u7684\u8c03\u7528\u662f\u81ea\u5b9a\u4e49\u51fd\u6570\u4f18\u5148\uff0c\u4f46\u6807\u51c6\u5e93\u51fd\u6570\u5e76\u4e0d\u5931\u53bb\u610f\u4e49\uff0c\u53ea\u662f\u8c03\u7528\u65b9\u5f0f\u8981\u6709\u6240\u6539\u53d8\uff1a\u5373\u7528::\u6253\u5934\u5219\u8c03\u7528\u5e93\u51fd\u6570\uff0c\u76f4\u63a5\u5199\u51fd\u6570\u540d\u5219\u8c03\u7528\u81ea\u5b9a\u4e49\u51fd\u6570\u3002\u4e0b\u9762\u4ee3\u7801\u53ef\u4ee5\u4f50\u8bc1\u2014\u2014
#include "stdio.h"void printf(void){puts("12345");}int main(int argv,char *argc[]){::printf("abc\n");//\u7528::\u6253\u5934\u8c03\u7528\u5e93\u51fd\u6570printfprintf();//\u76f4\u63a5\u8c03\u7528\u5219\u9ed8\u8ba4\u81ea\u5b9a\u4e49\u51fd\u6570return 0;}\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a

没有强制规定,但一般遵循以下原则:

1 功能类似或相关的一组函数写在同一个头文件中;
2 头文件命名应简单,尽量短,但可以通过文件名得知内部函数功能;
3 头文件名由数字、字母、下划线组成,不要有空白字符或其它符号;
4 为防止头文件重复引用,或嵌套引用,头文件应使用条件编译包含;
5 头文件中,应遵循先类型定义,后函数声明的顺序;
6 当头文件函数声明中,用到其它头文件中定义的类型时,在头文件开始处进行引用。

首先,要明白一点。标准库的头文件多次include是不会发生重定义的错误的。所有的标准库文件的内容都是如这般写的:

#ifndef STDLIB_H
#define STDLIB_H
...
#endif

这保证了它的内容只会被引用一次。所以要include,只写一句

#include <stdlib.h>

就可以了。


另外,你自己的头文件最好也加上上面所示的那种保卫宏,以防多次引用你自己的头文件出现重定义。


你说的重复定义,可能是另外一个问题。你说你自己做了一个库,如果你是用 Visual C 建工程生成的 lib 库文件,要注意项目属性里有一个 ”/Mt“ "/Md" 的选项。请保证选的是后者,否则你的库文件中会有一套标准库的函数的实现,而使用你的库编译其他程序的时候,又会再次连接系统库,如此便会产生重定义。



#include "MyHead.h"
来包含。
头文件是不编译的,因为C语言编译过程之前有个预编译过程。在这个过程中用头文件中的内容替换源文件中“#include”命令,所以在编译器看来,没有头文件,只有源文件。预编译过程还包括条件编译。
头文件为了防止被重复包含,通常的格式是:
/* MyHead.h */
#ifndef _MYHEAD_H_
#define _MYHEAD_H_
(这里是头文件的内容)
#endif /* _MYHEAD_H_ */
希望对你有帮助!

跟标准库的头没关系,标准库的头文件随便你包含多少次都不会有问题的。
你把报错的提示给贴上来吧。

  • C璇█涓,瀹氫箟鑷畾涔夊簱鍑芥暟鏃惰濡備綍鍐欏搴旂殑澶存枃浠
    绛旓細5 澶存枃浠朵腑锛屽簲閬靛惊鍏堢被鍨瀹氫箟锛屽悗鍑芥暟澹版槑鐨勯『搴忥紱6 褰撳ご鏂囦欢鍑芥暟澹版槑涓紝鐢ㄥ埌鍏跺畠澶存枃浠朵腑瀹氫箟鐨勭被鍨嬫椂锛屽湪澶存枃浠跺紑濮嬪杩涜寮曠敤銆
  • c璇█鑷畾涔夊嚱鏁鍦╩ain鍑芥暟鍓嶈繕鏄悗?
    绛旓細c璇█涓嚜瀹氫箟鍑芥暟鍙互鏀惧湪main鍑芥暟鍚庨潰锛屼絾闇瑕佸湪鍓嶉潰杩涜鍑芥暟瀹氫箟銆侰璇█鐨勫嚱鏁板畾涔夌殑浣滅敤鍩燂紝鍙檺浜庡悗闈㈢殑鍑芥暟鍙銆傚湪main鍑芥暟涓敤鍒扮殑鍏跺畠鍑芥暟锛屼竴绉嶆柟娉曟槸鍦╩ain鍑芥暟鐨勫墠闈㈠畾涔夊苟瀹炵幇鍑芥暟锛屽 //瀹氫箟骞跺疄鐜癴oo鍑芥暟void foo(int *a){ *a++;}int main(void){ int k foo(&k);//璋冪敤foo...
  • C璇█涓畾涔夊嚱鏁版椂,鍑芥暟杩斿洖鍊肩被鍨嬫槸浠涔,鍏抽敭瀛楀彲浠ョ渷鐣?
    绛旓細鍦 C 璇█涓紝褰瀹氫箟鍑芥暟鏃锛屽嚱鏁拌繑鍥炲肩被鍨嬪彲浠ユ寚瀹氫负浠讳綍涓绉嶆暟鎹被鍨嬶紝渚嬪 int銆乫loat銆乨ouble銆乧har銆乿oid 绛夈傚叧閿瓧鍙互鐪佺暐鐨勬儏鍐垫槸鎸囧嚱鏁拌繑鍥炲肩被鍨嬩负 void 鏃讹紝鍙互鐪佺暐鍏抽敭瀛椼備互涓嬫槸涓涓畝鍗曠殑 C 璇█鍑芥暟绀轰緥锛歩nclude <stdio.h> int add(int a, int b) { return a + b;} int ...
  • C璇█涓 鍑芥暟浣跨敤瀛鍑芥暟鏃涓鑸湁鍝笁涓楠?
    绛旓細C璇█涓鎯宠浣跨敤涓涓鑷畾涔夊嚱鏁涓鑸湁浠ヤ笅涓変釜姝ラ锛氫竴銆佸嚱鏁板0鏄庯細鍦ㄥ紑鍙戝ぇ鍨嬭蒋浠堕兘鏄噰鐢ㄥ浜哄悎浣滃紑鍙戯紝涓鑸竴涓汉璐熻矗瀹炵幇鍑犱釜鍔熻兘锛岃繖浜涘姛鑳介兘鏄氳繃鍑芥暟鏉ュ疄鐜般傝繖鎬绘儏鍐典笅鎴戜滑涓鑸噰鐢ㄥ嚱鏁板0鏄庡拰瀹氫箟鍒嗗紑妯″紡銆傚嵆鍑芥暟澹版槑鏀惧湪澶存枃浠堕噷銆傞渶瑕佺敤鍒版椂鍖呭惈鐩稿簲鐨勫ご鏂囦欢鍙婃柟娉曞簱鍗冲彲锛屽簱鍑芥暟灏辨槸杩欑妯″紡銆
  • c璇█鍦鍑芥暟瀹氫箟鐨勬椂鍊鍙互璋冪敤宸插畾涔夌殑鑷畾涔夊嚱鏁鍚
    绛旓細鍙互鐨勶紝鍓嶆彁鏄紝鍦ㄤ娇鐢ㄤ竴涓鍑芥暟涔嬪墠蹇呴』鍏堝浠栬繘琛屽0鏄庯細//void B();澹版槑B鍑芥暟鐨勫瓨鍦ㄣ倂oid A(){ B();//闈炴硶锛岀▼搴忔墽琛屽埌姝ゆ椂骞朵笉鐭ラ亾B鍑芥暟鐨勫瓨鍦ㄣ倉 void B(){ }
  • c璇█涓嚜瀹氫箟鍑芥暟涓搴撳嚱鏁鍙互闅忔剰璋冪敤鍚
    绛旓細鍥炵瓟锛氭槸鐨,鍙閫氱煡璋冪敤鍑芥暟璋冪敤瑙勫垯鍗冲彲,鎵璋撻氱煡鍗冲湪璋冪敤鍑芥暟鍓嶅啓鍑芥暟澶,鎴栧寘鍚叾涓湁鍑芥暟澶瀹氫箟鐨.h鏂囦欢.
  • 鍦c璇█涓嚜瀹氫箟浜嗕竴涓鍑芥暟,鍦╩ain涓皟鐢ㄦ椂鎻愮ず鎵句笉鍒版爣璇嗙,鎬庝箞...
    绛旓細鎶婂畾涔夌殑鍑芥暟鏀惧湪锛宮ain鍑芥暟涔嬪墠鍗冲彲銆鑷畾涔鐨勫嚱鏁伴渶瑕佸0鏄庡湪璋冪敤涔嬪墠锛屾瘮濡傝鍦╩ain鍑芥暟閲璋冪敤鑷畾涔夌殑fun()锛屽垯fun()鐨勬柟娉曚綋闇瑕佸啓鍦╩ain鍑芥暟涔嬪墠銆傚湪C璇█涓鐨勬墽琛屾绘槸浠巑ain鍑芥暟寮濮嬬殑锛屾棤璁簃ain鍑芥暟鍦ㄥ摢涓綅缃兘鑲畾浠庡畠寮濮嬨傚鏋滀綘瀹氫箟鐨勫嚱鏁板湪main鍑芥暟涔嬪悗銆傝屼笖鍦╩ain鍑芥暟鍓嶆病鏈夎繘琛岃璋冪敤鍑芥暟...
  • c璇█涓嚜瀹氫箟鍑芥暟鑳藉惁鏀惧湪main鍑芥暟鍚庨潰
    绛旓細鍙互鏀惧湪main()鍑芥暟鍚庨潰锛岄渶瑕佸湪mian()鍑芥暟鍓嶉潰鍋氫釜鍑芥暟鐢虫槑銆傚湪涓涓簮鏂囦欢涓畾涔夊嚱鏁涓斿湪鍙︿竴涓枃浠朵腑璋冪敤鍑芥暟鏃讹紝鍑芥暟澹版槑鏄繀闇鐨勩傚湪杩欑鎯呭喌涓锛屽簲璇鍦ㄨ皟鐢ㄥ嚱鏁扮殑鏂囦欢椤堕儴澹版槑鍑芥暟銆傚锛歩nclude <stdio.h> /* 鍑芥暟澹版槑 */ int max(int num1, int num2);int main (){...鍑芥暟澹版槑浼氬憡璇夌紪...
  • C璇█鑻鑷畾涔瑕佹眰鍑芥暟鍚嶈繑鍥炰竴涓,鍒璇ュ嚱鏁浣撲腑蹇呴』瑕佹湁return璇彞...
    绛旓細閿欑殑銆傝繖涓嚱鏁版帴鍙2涓暣褰紝m鍜宯锛屽嚱鏁鍐呭鏄竴涓惊鐜紝杩涜n娆★紝姣忔灏唒锛堝垵濮嬪1锛夎祴鍊间负p*m锛屾渶鍚庤繑鍥瀙鐨勫笺傛瘮濡倄=p(2,3)锛屽氨鏄痬=2锛宯=3锛岃繍琛3娆″惊鐜紝绗竴娆★紝p=p*m=1*2=2锛岀浜屾锛宲=p*m=2*2=4锛岀涓夋锛宲=p*m=4*2=8锛屾渶鍚庤繑鍥8锛寈=8銆
  • C璇█ 鐢ㄦ埛鑷畾涔夊嚱鏁鍦ㄤ富鍑芥暟鍓嶉潰鏃剁郴缁熷厛鎵ц涓诲嚱鏁拌繕鏄嚜瀹氫箟...
    绛旓細c绋嬪簭閮芥槸浠巑ain鍑芥暟寮濮嬫墽琛岀殑锛岃鍒鑷畾涔夊嚱鏁鍐嶈皟鐢紱鑷畾涔夊嚱鏁板湪涓诲嚱鏁板墠瀹氫箟锛屽彧鏄渷浜璇ュ嚱鏁鐨勫0鏄锛屽嚱鏁杩樻槸浠巑ain鍑芥暟寮濮嬫墽琛岋紝main鍑芥暟璋冪敤鍏朵粬鍑芥暟锛屽寘鎷綘鑷畾涔夌殑鍑芥暟锛
  • 扩展阅读:扫一扫题目出答案 ... c语言符号大全表解释 ... 与其被定义 不如自定义 ... 自定义与被定义议论文 ... c中如何自定义函数 ... 如何定义自定义异常类 ... 自定义与被定义素材 ... c语言自定义幂函数 ... c语言自定义函数怎么声明 ...

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