01. 宏定义用do{}while(0)
如果定义的宏函数后面有多条语句,使用这样的方式会有问题:
#define FUNC() func1(); func2() if(bRunF) FUNC();
展开宏定义后会变成:
if(bRunF) func1(); func2();
逻辑就不对了。可以用这一的方式解决,非常好用:
#define FUNC() do{func1(); func2();}while(0)
02. 数组的初始化
假如给arr的第2~6元素初始化为5,也许你会
int arr[10] = {0, 5, 5, 5, 5, 5, 0, 0, 0, 0};
现在告诉你C99可以这样:
int arr[10] = {[1... 5] = 5};
03. 数组的访问
你想取数组的第6个元素(下标为5),教科书教你这样做:
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int n1 = arr[5]; int n2 = *(arr+5);
其实你可以:
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = 5[arr];
也不会有错,实际上arr[5]对应*(arr+5)
,而5[arr]对应*(5+arr)
,没多大区别。
04. 结构体的初始化
结构体的初始化,传统的