C语言头文件函数声明是否加extern
2017-10-25 09:54
218 查看
最近看创龙的DSP程序,忽然遇到一个C语言的语法问题,感觉非常纠结,归根结底还是以前C语言学的不扎实,所以才会卡在这种小的语法问题上。我的问题是这样的,在看UART_EDMA例程的时候,main函数调用了UARTStdioInit();函数,UARTStdioInit();在uartStdio.c文件里,然后UARTStdioInit();函数里又调用了UARTConsoleInit();函数,该函数在UARTConsole.c文件里。
然后,在UARTConsoleInit();函数里,又调用了
PSCModuleControl(SOC_PSC_1_REGS,13, 0, PSC_MDCTL_NEXT_ENABLE);函数,问题来了。我在查看声明PSCModuleControl函数的头文件psc.h的时候,看到了PSCModuleControl函数声明没有加extern关键字,而另外又有两个函数声明,却是加了extern关键字的。如下图所示:
回头再看main函数,发现有些函数也没加extern关键字。比如
(main函数)
(edma.h文件)
而有些却加了,比如:
(main函数)
(uartStdio.h文件)
那么,到底什么时候加extern关键字,什么时候不加?我想了很久,最后暂时得出这样的解释,加不加无所谓!
主函数中,这两个函数,
一个是加了extern,一个没加,我试了去掉加了extern的函数声明的extern关键字,结果发现编译没有任何问题,运行也可以,所以,总结就是,没必要加。
然后,在UARTConsoleInit();函数里,又调用了
PSCModuleControl(SOC_PSC_1_REGS,13, 0, PSC_MDCTL_NEXT_ENABLE);函数,问题来了。我在查看声明PSCModuleControl函数的头文件psc.h的时候,看到了PSCModuleControl函数声明没有加extern关键字,而另外又有两个函数声明,却是加了extern关键字的。如下图所示:
回头再看main函数,发现有些函数也没加extern关键字。比如
(main函数)
(edma.h文件)
而有些却加了,比如:
(main函数)
(uartStdio.h文件)
那么,到底什么时候加extern关键字,什么时候不加?我想了很久,最后暂时得出这样的解释,加不加无所谓!
主函数中,这两个函数,
一个是加了extern,一个没加,我试了去掉加了extern的函数声明的extern关键字,结果发现编译没有任何问题,运行也可以,所以,总结就是,没必要加。
相关文章推荐
- c语言头文件中函数是否加extern
- C语言头文件组织与包含原则(函数指针和结构体的前项声明)
- C++函数重载实现的原理以及为什么在C++中调用C语言编译的函数时要加上extern "C"声明
- c语言变量和函数声明的修饰符static,extern,#define,const
- C语言H-声明extern
- C语言——extern声明的总结
- oracle里是否有类似于c语言的split()函数的功能???
- 通过GetProcAddress函数动态调用dll中地函数,是否必须通过extern C声明导出函数?
- c语言的隐式函数声明">1 什么是C语言的隐式函数声明
- 【C语言】19-static和extern关键字1-对函数的作用
- C语言头文件不定义全局变量、函数等
- 用C语言实现多项式合并(函数声明和主函数)
- 【零基础学习iOS开发】【02-C语言】11-函数的声明和定义
- C语言易混淆关键词详解-const, static, extern, typedef, 声明
- 通过GetProcAddress函数动态调用dll中地函数,是否必须通过extern C声明导出函数?
- 为什么要用到extern 声明 include所包含的程序中的函数?
- 为什么在C语言中函数的声明很重要
- C函数声明要不要加extern(未解)
- C语言 static和extern关键字 对函数的作用
- C语言中的声明解析规则——数组,指针与函数