const 修飾的變數具唯讀屬性,但本質非常數(const int != 常數)。#define 差異:const 有型別、單一拷貝、編譯期確定;#define 無型別、多拷貝、預處理替換。typedef struct student { ... } Stu_st, *Stu_pst;
const Stu_pst stu3; // 等價於 Stu_pst const stu3;
Stu_pst const stu4;
兩者類型相同。typedef 不像 #define 直接展開,const 修飾的是變數本身,不考慮型別細節。
C99 特性,又稱零長度陣列。定義:
struct line {
int length;
char contents[]; // 柔性陣列
};
sizeof 不包含其大小。malloc(sizeof(struct line) + this_length)。contents[0],C99 可直接 contents[]。編譯器語法分析時採用貪心法則:若當前字元可與前一字元組成有意義符號,則繼續讀入,直到無法組成。例:a+++b 解析為 (a++) + b(因 a++ 合法,a+++ 非法)。
#line number ["filename"]:改變當前行號與檔案名。#error:編譯時產生錯誤訊息並停止編譯。預定義宏:__LINE__、__FILE__、__TIME__、__STDC__。