C语言编程基础经典案例

本文介绍了C语言编程的基础知识,包括#define预处理指令、全局define、extern变量声明、typedef类型别名、结构体的使用以及函数中结构体参数的传递方式。还讨论了在STM32开发中涉及的全局变量、结构体定义和初始化,以及在不同文件间的协调,如IMPORT伪指令的使用。最后提到了volatile关键字在内存映射I/O中的作用。
摘要由CSDN通过智能技术生成

刚开始学习的时候,会有很多疑惑,例如指针怎么用,结构体跟指针怎么配合,例如函数的参数有什么要求,如何实时更新IO口的数据等。如果重新进行C语言的学习,那么要学很久才能够系统地认识。本文则将比较容易想不起来的知识点进行简单的整理。

  1、#ifdef 和 #ifndef

  #ifdef 标识符A// 如果标识符A定义了,就编译程序段1,否则编译程序段2

  程序段1

  #else

  程序段2

  #endif

  #ifndef 的功能则与 #ifdef相反,是没有定义标识符A的时候编译程序段1。

  2、全局define

  在软件的选项中,有如此一栏,在上面填写的变量则表示在所有的文件中,上述的标识均被定义过。

  #ifdef STM32F10X_HD

  大容量芯片需要的一些变量定义

  #end

  3、extern变量申明

  C语言中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里面要注意,对于extern申明变量可以多次,但定义只有一次。

  extern u16 USART_RX_STA;

  这个语句是申明USART_RX_STA变量在其他文件中已经定义了,在这里要使用到。

  下面通过一个例子说明一下使用方法。

  在Main.c定义的全局变量id,id的初始化都是在Main.c里面进行的。

  Main.c文件

  u8 id; //定义只允许一次

  main() {

  id=1; printf("d%",id); //id=1

  test();

  printf("d%",id);//id=2

  }

  但是我们希望在test.c的

changeId(void)函数中使用变量id,这个时候我们就需要在test.c里面去申明变量id是外部定义的了,因为如果不申明,变量id的作用域是到不了test.c文件中。

  看下面test.c中的代码:

  extern u8 id;//申明变量id是在外部定义的,申明可以在很多个文件中进行

  void test(void){ id=2; }

  在test.c中申明变量id在外部定义,然后在test.c中就可以使用变量id了。

  4、typedef类型别名

  typedef用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。typedef在MDK用得最多的就是定义结构体的类型别名和枚举类型了。

  struct _GPIO { __IO uint32_t CRL; __IO uint32_t CRH; … };

  定义了一个结构体GPIO,这样我们定义变量的方式为:

  struct _GPIO G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值