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