ifdef
#ifdef X
....(如果X这个标识符定义了,运行这段程序)
#else
....(如果标识符没有定义,运行这段程序)
#endif (结束ifdef)
#ifndef X
....(如果X这个标识符没有定义,运行这段程序)
#else
....(如果标识符定义了,运行这段程序)
#endif (结束ifdef)
typedef
typedef unsigned char uint8_t(类型别名)
extern
extern 当申明的id不在同一个作用域时用extern申明
A文件
int a=10;
B文件 (直接使用a会报错,需要使用extern申明)
extern int a;
a=100;
static
Static申明的局部变量,存储在静态存储区 。
静态的局部变量在初始化时只会初始化一次,所以可以说static申明的局部变量,具有记忆功能。
Static申明的函数作用域仅限当前.c文件,其他.c无法调用
int getstaticvalue(void) (调用一次value就会加一,只有第一次value会赋0)
{
static int value=0;
value++;
return value;
}
int getstaticvalue(void) (调用一次value加一,再次调用value赋0重新加一)
{
int value=0;
value++;
return value;
}
_ _weak
_ _weak函数和重写的函数不能放在同一文件。
A.c文件里
void weak(void)
{
printf("s");
}
B.c文件里
_ _weak void weak(void)
{
printf("a");
}
如果没有重新定义weak函数,则会调用B文件里的,如果又定义了会执行A文件里的,weak降低调用等级
struct
struct A //结构体类型
{ //结构体成员(类型 成员名)
int a;
char b;
float c;
} X,Y; //结构体变量名
创建结构数组
struct
{
...
...
...
}A[3]={{... , ... , ...},
{... , ... , ...},
{... , ... , ...}};
struct
{
...
...
...
}A[]={{...},{...},{...}};
struct A
{
...
...
...
};
A[3]={{... , ... , ...},
{... , ... , ...},
{... , ... , ...}};