ID:嵌入式情报局作者:情报兄弟1 void和void * void表示未类型化,不能采用此类型声明变量或常量,但可以将其定义为void指针类型,例如void * ptr。

空指针可以指向任何类型的数据,并且任何数据类型的指针都可以用于分配空指针,例如int * ptrInt;无效* ptrVoid = ptrInt;指针的分配可以看作是地址的转移,一般的32位系统指针为4字节,因此指针的分配只是这4个字节的分配,与类型无关。

1 void *& memcpy(void * dest,const void * src,& nbsp; size_t& nbsp; len& nbsp;); 2 void *  memset(void *& nbsp; buffer,& nbsp; int& nbsp; c,& nbsp; size_t& nbsp; num); 2 volatile关键字volatile修改意味着变量是volatile。

每次使用此变量时,编译器中的优化器必须仔细地从内存中重新读取此变量的值,而不是使用存储在寄存器中的值。

备份,有效防止编译器自动优化,从而符合软件设计。

3数据占用大小数据占用大小是指平台上不同数据类型占用的字节数。

不同类型的不同平台占用的字节数略有不同。

但是,在相应平台的开发过程中,必须注意每种数据类型的大小,否则各种数据溢出,数据越界等将接follow而至。

以下是一些数据占用的简单列表:(通常为32位PC)char 8bit短16bit int 32bit长32bit float 32bit double ble 64bit 4 const和指针const的意思是常量,以及指针组合的主要问题It是const在指针中的位置,导致变量属性不同。

主要的识别方法是删除数据类型,并查看由const修改的部分。

const int * ptr-> const * ptr->然后,const修改* ptr,并且* ptr表示指针所指向的内容,因此其整体也称为“常量指针”。

表示无法更改该值。

int * const ptr-> * const ptr->然后,const修改ptr,并且ptr表示指针变量,并且指针变量的值是地址,因此总体也称为“指针常量”。

这意味着该地址不能更改。

5结构和连体。

在嵌入式领域中,结构和连接体的使用非常频繁。

由一些可编程芯片提供的寄存器库以结构体和联合体的组合提供给软件人员。

这两种数据类型的开发以及在常规编码过程中的灵活应用也可以实现更好的代码封装和简化。

如下面的简单示例所示,您可以非常灵活地访问Val中的位。

1typedef& nbsp;联盟2 {3 BYTE& nbsp; Val;封装了4个struct 5 {6 BYTE&bnb0:1; 7 BYTE&bnb:1; 8 BYTE& b2:1; 9 BYTE&bnb:1; 10 BYTE&bnb4:1; 11 BYTE&bnb5:1; 12 BYTE& b6:1; 13 BYTE&bnb:1; 14}位; 15} BYTE_VAL,& nbsp; BYTE_BITS; 6预定义标识符常规编译器支持预定义标识符,这些标识符与诸如printf之类的打印信息结合在一起对帮助程序员调试程序非常有用。

通常,编译器会根据用户规范自动完成替换和处理。

以下是常用的标识符:__FILE __& nbsp ;:表示要编译的源文件字符串; __LINE__:表示当前文件的行号; __DATE__:表示文件日期; __TIME__:表示文件时间;用法示例:1printf(“ file:%s & nbsp;行:%d& nbsp; & nbsp;数据:%s& nbsp; & nbsp;时间:%s& nbsp; ",__ FILE __,__ LINE __,__ DATE __,__ TIME__); 7#与###:是运算符,用于使用参数宏替换文本,并将以下参数转换为字符串常量。

##:是将两个操作数连接在一起的运算符,并且只能在带有参数宏定义的文本替换中出现。

1#define  STR(s)& nbsp;#s2#define& nbsp; COMB(str1,str2)& nbsp; str1 ## str2 3int& nbsp; main()4 {5 int& nbsp; UART1 = 57600; 6个printf(“%d "& nbsp; COMB(UART,1)); 7个printf(“%s " STR(3.1415)); 8返回0; 9} 2最后,这是高级嵌入式C的一些关键点的摘要,希望对您有所帮助,Linux应用程序编程书将继续更新。

,中间还有一些其他嵌入式知识可以作为缓冲,请在此处共享,下期再见!免责声明:c