1. 宏定义 + do...while(0)
当宏定义有多行时,需要使用。避免情况:
if(1)
宏row1
宏row2
2. 宏定义 + 小括号参数
参数使用小括号括起来。避免情况参数是表达式。
3. 结构体中最后一个成员数组长度为[0]
- 巧妙实现对结构体扩展。通常都是用指针。
- 相较于用指针,不需要初始化。不占用空间。
struct MyData
{
int nLen;
char data[0];
};
int main()
{
int nLen = 10;
char str[10] = "123456789";
cout << "Size of MyData: " << sizeof(MyData) << endl;
MyData *myData = (MyData*)malloc(sizeof(MyData) + 10);
memcpy(myData->data, str, 10);
cout << "myData's Data is: " << myData->data << endl;
free(myData);
return 0;
}
输出:
Size of MyData: 4
myData's Data is: 123456789