本文将通过自己写的寄存器函数,来介绍函数定义,声明,调用相关知识。

1、原来gpio.h文件中有如图中圈起来部分声明。后来被我注释掉了。
gpio.h文件被引用在main.c中。
编程之函数调用

2、当调用那三个函数时,会出现3个警告。
编程之函数调用
具体就是,这三个函数没有显式声明!
编程之函数调用
3、分析:
C语言中对单个.c文件进行编译,连接,生成.o目标文件。
在对main.c文件进行编译时,先把头文件的内容加进来。一般运行函数,都要先进行定义然后再调用。如果在.c文件中没有找到该函数定义,然而却调用了,就会出现上述警告。
4、解决方法
头文件中没有那三个函数声明,但我可以直接加在main.c函数声明中。这样对于main.c文件而言,该函数就有声明,这时函数就可以调用了。
编程之函数调用
加上上述声明,此时系统编译没有发生错误。
上述调用函数的定义在哪里呢?在gpio.c中,这个函数定义时是可以全局调用的,所以可以直接声明调用。那改变函数的定义方式又会出现哪些错误呢?

上面部分都是在函数声明上进行讨论,下面将对函数定义部分进行研究。
1、添加static关键字,使得函数的可调用范围发生变化。
编程之函数调用
2、编译
出现警告,说一个函数被声明了,但是没有被referenced。
注意:这个警告发生在gpio.c的编译中。
也就是说在编译环节,main.c文件编译没有问题。只要main.c中头文件中包括函数的声明,那么在main{}中进行调用该该函数是不会有警告的。
从而可以推断出编译器的任务:检查

编程之函数调用
接下来我把main.c中调用gpio.init函数给注释了,再次编译。这一次是never used。
编程之函数调用

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2021-12-11
  • 2021-09-18
猜你喜欢
  • 2021-12-21
  • 2021-05-29
  • 2021-11-18
  • 2021-12-11
  • 2021-07-04
  • 2022-12-23
  • 2021-11-18
相关资源
相似解决方案