最近看创龙的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关键字,结果发现编译没有任何问题,运行也可以,所以,总结就是,没必要加。