道哥的第 031 篇原創(chuàng)一、前言
這幾天在把一個
嵌入式項目的代碼,移植到另一個平臺,發(fā)現(xiàn)很多地方用的都是 C89 標準。1999 年,
C語言的標準化委員會發(fā)布了
C99 標準,引入了許多特性,包括可變長度的數組、靈活的數組成員(用在結構體)、對IEEE754浮點數的改進、指定成員的初始化器、內聯(lián)函數、支持不定參數個數的宏定義,在數據類型上還增加了 long long int 以及復數類型。于是最近找了一本比較新的
C 語言書籍翻了一下,發(fā)現(xiàn)很多比較偏僻的語法,很少被使用到,包括 C99 標準中的一些內容,所以我想把這部分內容整理一下,也是讓自己對這一門古老的語言重新梳理一下。
二、小試牛刀
1. 靈活的數組成員
先不解釋概念,我們先來看一個代碼示例:
// 一個結構體,成員變量 data 是指針
typedef struct _Data1_ {
int num;
char *data;
} Data1;
void demo6_not_good()
{
// 打印結構體的內存大小
int size = sizeof(Data1);
printf("size = %d \n", size);
// 分配一個結構體指針
Data1 *ams = (Data1 *)malloc(size);
ams->num = 1;
// 為結構體中的 data 指針分配空間
ams->data = (char *)malloc(1024);
strcpy(ams->data, "hello");
printf("ams->data = %s \n", ams->data);
// 打印結構體指針、成員變量的地址
printf("ams = 0x%x \n", ams);
printf("ams->num = 0x%x \n",