tips
全局变量的申明、定义与使用
全局变量申明与定义可在同一名的.c和.h下进行,其余.c使用时include这个.h就行。
具体说明:在a.c中使用全局变量global
a.c
#include "b.h"
int main()
{
printf("%d",global);
}
b.h
extern int b;
b.c
#include "b.h"
int b=1;
宏定义常量的申明与使用
先上个错误案例,这个错查了我很久,最后还是找大哥帮查出来的
错误案例:
a.h
#define movement_mode_forward 1;
#define movement_mode_stop 2;
int choose_movement(int movement_mode);
a.c
#include a.h
int choose_movement(int movement_mode)
{
switch(movement_mode)
{
case movement_mode_forward: forward(); break;
case movement_mode_stop: stop(); break;
default:return 1;
}
return 0;
}
编译报错:
error: #53: expected a “:”
case movement_mode_forward: forward(); break;
error: #53: expected a “:”
case movement_mode_stop: stop(); break;
错误原因:
宏定义常量结尾不加“;”,在案例中
case movement_mode_forward: forward(); break;
被替换为了
case 1;: forward(); break;
故报错case后缺少“:”
宏判断是否属于想要的宏常量类
上例子
a.h
#define movement_mode_forward 1
#define movement_mode_stop 2
#define IS_MOVEMENT(PERIPH) (((PERIPH) == movement_mode_forward) || \
((PERIPH) == movement_mode_stop)
int choose_movement(int movement_mode);
a.c
int choose_movement(int movement_mode)
{
if(IS_MOVEMENT(movement_mode))
{
switch(movement_mode)
{
case movement_mode_forward: forward(); break;
case movement_mode_stop: stop(); break;
}
return 0;
}
return 1;
}