当前位置:   article > 正文

define,typedef,ifdef,extern的使用_define extern

define extern

define 宏定义

define 是 C 语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。常见的格式:

#define 标识符 字符串
  • 1

“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如:

#define uchar unsigned char //该行程序语句无需“;”作为结束符
  • 1

#define 命令作用相当于将“原内容”重新起了一个比较简单的“新名称”,方便以后在程序中直接写简短的新名称,而不必每次都写繁琐的“原内容”。

typedef 声明的作用

typedef 用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。
常见的格式:

typedef 字符串 标识符 
  • 1

“字符串”可以是常数、表达式、格式串等。“标识符”为所定义的宏名。例如:

typedef unsigned char uchar; //该行程序语句必须使用“;”作为结束符
  • 1

typedef 的真正意义是给一个已经存在的数据类型(注意:是类型不是变量)取一个别名,而非定义一个新的数据类型。“typedef”本身就是一种存储类的关键字,可对数组及数据结构等进行声明,而“define”却做不到!

ifdef 条件编译

单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而
当条件不满足时则编译另一组语句。条件编译命令最常见的形式为:

#ifdef 标识符
程序段 1 
#else 
程序段 2 
#endif
  • 1
  • 2
  • 3
  • 4
  • 5

它的作用是:当标识符已经被定义过(一般是用#define 命令定义),则对程序段 1 进行编译,否则编译程序段 2。 其中#else 部分也可以没有,即:

#ifdef 
程序段 1 
#endif
  • 1
  • 2
  • 3

这个条件编译在 MDK 里面是用得很多的,在 stm32f10x.h 这个头文件中经常会看到这样的语句:

#ifdef STM32F10X_HD
大容量芯片需要的一些变量定义
#end
  • 1
  • 2
  • 3

extern 变量申明

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

extern u16 USART_RX_STA; 
  • 1

这个语句是申明 USART_RX_STA 变量在其他文件中已经定义了,在这里要使用到。所以,你肯定可以找到在某个地方有变量定义的语句:

u16 USART_RX_STA; 
  • 1

的出现。下面通过一个例子说明一下使用方法。 在 Main.c 定义的全局变量 id,id 的初始化都是在 Main.c 里面进行的。
Main.c 文件

u8 id;//定义只允许一次
main()
{
id=1;
printf("d%",id);//id=1
test();
printf("d%",id);//id=2
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

extern u8 id;//申明变量 id 是在外部定义的,申明可以在很多个文件中进行
void test(void){
id=2;
} 
  • 1
  • 2
  • 3
  • 4

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/264298
推荐阅读
相关标签
  

闽ICP备14008679号