C语言中,extern 修饰函数是什么意思? c语言中extern的意思是什么??

\u5728C\u8bed\u8a00\u4e2d\u5934\u6587\u4ef6\u7684extern\u662f\u4ec0\u4e48\u610f\u601d\u5462\uff1f

\u662f\u4e00\u4e2a\u4fee\u9970\u7b26\uff0c\u5728C\u8bed\u8a00\u4e2d\uff0c\u4fee\u9970\u7b26extern\u7528\u5728\u53d8\u91cf\u6216\u8005\u51fd\u6570\u7684\u58f0\u660e\u524d\uff0c\u7528\u6765\u8bf4\u660e\u201c\u6b64\u53d8\u91cf/\u51fd\u6570\u662f\u5728\u522b\u5904\u5b9a\u4e49\u7684\uff0c\u8981\u5728\u6b64\u5904\u5f15\u7528\u201d\u3002extern\u53ef\u7f6e\u4e8e\u53d8\u91cf\u6216\u8005\u51fd\u6570\u524d\uff0c\u4ee5\u8868\u793a\u53d8\u91cf\u6216\u8005\u51fd\u6570\u7684\u5b9a\u4e49\u5728\u522b\u7684\u6587\u4ef6\u4e2d\uff0c\u63d0\u793a\u7f16\u8bd1\u5668\u9047\u5230\u6b64\u53d8\u91cf\u6216\u51fd\u6570\u65f6\uff0c\u5728\u5176\u5b83\u6a21\u5757\u4e2d\u5bfb\u627e\u5176\u5b9a\u4e49\u3002\u53e6\u5916\uff0cextern\u4e5f\u53ef\u7528\u6765\u8fdb\u884c\u94fe\u63a5\u6307\u5b9a\u3002
\u5728\u5934\u6587\u4ef6\u4e2d\u58f0\u660e\u51fd\u6570\u65f6\uff0c\u524d\u9762\u7684extern\u53ef\u6709\u53ef\u65e0\uff0c\u53ea\u8981\u8fd9\u4e9b\u51fd\u6570\u66fe\u5728\u67d0\u4e2a.c\u6587\u4ef6\u4e2d\u5b9e\u73b0\u5c31\u884c\u4e86\uff0c\u4e0d\u8fc7\u4e00\u4e9b\u51fd\u6570\u6ca1\u6709\u5728\u6240\u5305\u542b\u7684\u5934\u6587\u4ef6\u4e2d\u7ed9\u51fa\u58f0\u660e\uff0c\u540c\u65f6\u51fd\u6570\u7684\u5b9a\u4e49\u4f4d\u4e8e\u5176\u5b83\u6587\u4ef6\u4e2d\uff0c\u8fd9\u65f6\u5019\u4f7f\u7528\u8be5\u51fd\u6570\u7684.c\u6587\u4ef6\u5fc5\u987b\u7528extern\u6807\u8bb0\u8be5\u51fd\u6570\u4e3a\u5916\u90e8\u51fd\u6570\u3002\u4f8b\u5b50\uff1a
/* c.h */extern int max(int a, int b);extern int min(int a, int b);/* a.c */#include /* \u8fd9\u91cc\u9700\u8981\u660e\u786e\u6307\u5b9aoutput\u4e3aextern\u51fd\u6570 */extern void output();int max(int a, int b){ return (a > b ? a : b);}int min(int a, int b){ return (a < b ? a : b);}void main(){ output();}/* b.c */#include "c.h"void output(){ printf("%d %d\n", max(10, 5), min(10, 5));}

extern\u5173\u952e\u5b57\u53ef\u4ee5\u7f6e\u4e8e\u53d8\u91cf\u6216\u8005\u51fd\u6570\u524d\uff0c\u4ee5\u6807\u793a\u53d8\u91cf\u6216\u8005\u51fd\u6570\u7684\u5b9a\u4e49\u5728\u522b\u7684\u6587\u4ef6\u4e2d\uff0c\u63d0\u793a\u7f16\u8bd1\u5668\u9047\u5230\u6b64\u53d8\u91cf\u548c\u51fd\u6570\u65f6\u5728\u5176\u4ed6\u6a21\u5757\u4e2d\u5bfb\u627e\u5176\u5b9a\u4e49\u3002\u8fd9\u91cc\u8d77\u5230\u7684\u662f\u58f0\u660e\u4f5c\u7528\u8303\u56f4\u7684\u7528\u5904\u3002
extern\u7684\u53e6\u5916\u7528\u6cd5\u662f\u5f53C\u548cC++\u6df7\u5408\u7f16\u7a0b\u65f6\u5047\u5982c++\u8c03\u7528\u7684\u662fc\u6e90\u6587\u6863\u5b9a\u4e49\u7684\u51fd\u6570\u6216\u53d8\u91cf\uff0c\u90a3\u4e48\u8981\u52a0extern\u6765\u544a\u8bc9\u7f16\u8bd1\u5668\u7528c\u65b9\u5f0f\u547d\u540d\u51fd\u6570\uff1a
\u6587\u6863A.cpp\u8c03\u7528a.c\u91cc\u9762\u7684\u53d8\u91cfi\u548c\u51fd\u6570callme()

\u62d3\u5c55\u8d44\u65991\u3001\u53ef\u4ee5\u901a\u8fc7\u628a\u539f\u51fd\u6570\u540d\u4e0e\u53c2\u6570\u4fe1\u606f\u7ed3\u5408\uff0c\u4ea7\u751f\u4e00\u4e2a\u72ec\u7279\u7684\u5185\u90e8\u540d\u5b57\uff0c\u8fd9\u79cd\u6280\u672f\u53eb\u505a\u540d\u5b57\u4fee\u9970\uff08Name Mangling\uff09\u3002\u540d\u5b57\u4fee\u9970\u89c4\u5219\u6ca1\u6709\u4e00\u4e2a\u6807\u51c6\uff0c\u6240\u4ee5\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u7684\u540d\u5b57\u4fee\u9970\u89c4\u5219\u4e5f\u4e0d\u4e00\u6837\u3002
\u4e0b\u9762\u662f\u4e00\u7ec4\u51fd\u6570\uff0c\u5176\u4e2df()\u51fd\u6570\u91cd\u8f7d\u4e86\uff1a

f(void)\u548cf(int)\u662f\u4e0d\u540c\u7684\u51fd\u6570\uff0c\u9664\u4e86\u51fd\u6570\u540d\u76f8\u540c\u4ee5\u5916\u6ca1\u6709\u4efb\u4f55\u5173\u7cfb\u3002\u5f53\u751f\u6210obj\u76ee\u6807\u6587\u4ef6\u65f6\uff0c\u4e3a\u4e86\u533a\u5206\u5b83\u4eec\uff0cC++\u7f16\u8bd1\u5668\u6839\u636e\u53c2\u6570\u4fe1\u606f\u8fdb\u884c\u4e86\u540d\u5b57\u4fee\u9970\uff1a

2\u3001C\u8bed\u8a00\u4e2d\u6ca1\u6709\u540d\u5b57\u4fee\u9970\uff08Name Mangling\uff09\uff0c\u56e0\u4e3aC\u8bed\u8a00\u4e0d\u652f\u6301\u51fd\u6570\u91cd\u8f7d\u3002\u4f46\u662f\u5982\u679cC++\u4e2d\u542b\u6709C\u4ee3\u7801\uff0c\u5728\u7f16\u8bd1\u65f6C++\u7f16\u8bd1\u5668\u5bf9C\u4ee3\u7801\u7684\u51fd\u6570\u4e5f\u4f1a\u8fdb\u884c\u540d\u5b57\u4fee\u9970\uff0c\u51fd\u6570\u540d\u53d8\u4e86\u4ee5\u540e\uff0c\u5c06\u5bfc\u81f4\u5728C\u8fd0\u884c\u5e93\u4e2d\u627e\u4e0d\u5230\u5bf9\u5e94\u51fd\u6570\uff0c\u53d1\u751f\u94fe\u63a5\u9519\u8bef\u3002

\u4e3a\u4e86\u9632\u6b62C++\u7f16\u8bd1\u5668\u5bf9C\u4ee3\u7801\u8fdb\u884c\u540d\u5b57\u4fee\u9970\uff0c\u6211\u4eec\u5c06C\u4ee3\u7801\u7528extern \u201cC\u201d\u8fdb\u884c\u94fe\u63a5\u6307\u5b9a\uff0c\u544a\u8bc9\u7f16\u8bd1\u5668\uff0c\u5728\u751f\u6210\u4e2d\u95f4\u6587\u4ef6\u65f6\uff0c\u4e0d\u8981\u5bf9\u8fd9\u90e8\u5206\u4ee3\u7801\u8fdb\u884c\u540d\u5b57\u4fee\u9970\uff0c\u800c\u662f\u751f\u6210\u7b26\u5408C\u89c4\u5219\u7684\u4e2d\u95f4\u7b26\u53f7\u540d\u3002

\u6dfb\u52a0\u4e86extern \u201cC\u201d\u94fe\u63a5\u6307\u793a\u540e\uff0c\u4e0a\u9762\u7684\u4ee3\u7801\u5c31\u80fd\u591f\u6b63\u5e38\u8fd0\u884c\u4e86\u3002

extern表明这个函数或者变量在别的文件中定义的,在文件A中才能使用这个函数或者变量

不申明extern也能调用函数f,我试过了!

那是因为你include了文件B

extern是全局变量声明
只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)

若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下

例如 #include "my_Fun.c"
extern int b;//b是在my_Fun.c中声明了的一个全局变量

这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)

这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了

咯咯
是这样的
如果你想定义一个静态函数
要在函数返回值类型前加static
如果你想定义一个外部函数
要在函数返回值类型前加extern(可省略)
也就是说
默认为extern的

因为函数是在B里定义的,A要用B里的函数,要加extern作外部申明才能用~否则A不识别那个函数~

外部说明,可以把该程序中定以的变量用于其他程序中

扩展阅读:c语言extern的用法 ... c++中extern的用法 ... c语言extern说明 ... c语言extern结构体 ... extern用法举例 ... c语言extern怎么跨文件 ... extern void ... extern具体用法 ... c语言extern最简单的编译 ...

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