ISO C99中的一些扩展(草稿)
一、指定數組初始化
int arry[6] = { [4] = 29, [2] = 15 }; ? //指定arry[4]=29, arry[2]=15 ,其他的為0
等價于
int arry[6] = { 0, 0, 15, 0, 29, 0 };
類似于注定結構體初始化
二、空結構體,C89標準的結構體不支持空結構體的。。
struct empty {
};
三、C++一樣的注釋符號 //
四、支持inline類聯函數
static inline int
inc (int *a)
{
return (*a)++;
}
__inline__ ?在一個頭文件中使用 __inline__ 聲明inline函數,因為ISO C90沒有inline,這個時候就會被解釋成空,忽略掉他。。。
五、聲明時使用變量初始化
foo (float f, float g)
{
float beat_freqs[2] = { f-g, f+g };
/* ... */
}
六、標識符允許添加美元符號
七、老式的函數定義不在支持
/* Old-style function definition. ?*/
int
isroot (x) ? /* ??? lossage here ??? */
uid_t x;
{
return x == 0;
}
八、case語句的范圍caselow ...high:
像 case 'A'...'Z':
case 1...5:
九、多了一個轉義字符 '\e' ,表示 <ESC>
十、類型轉換可以轉成union類型
union foo { int i; double d; };
int x;
double y;
union foo u;
/* ... */
u = (union foo) x ?== ?u.i = x
u = (union foo) y ?== ?u.d = y
十一、變量、函數和類型可以添加屬性 __attribute__
十二、數組可以用restrict修飾, 想 arry_name[restrict]
十三、支持復數運算
十四、支持嵌套函數(Nested Functions)
foo (double a, double b)
{
double square (double z) { return z * z; }
return square (a) + square (b);
}
十五、修改了條件運算符
原先的是:
x?x:y;
C99可以寫成:
x ? : y;
十六、標簽即變量
static void *array[] = { &&foo, &&bar, &&hack };
goto *array[i];
十七、支持變參宏
#define ENABLE_DEBUG 1 ? //else, comment this line
#ifdef ENABLE_DEBUG
#define DEBUG_LOG(fmt,...) fprintf(stderr, "%s:%d: " fmt "\n", ?\
__func__, __LINE__, ## __VA_ARGS__)
#else
#define DEBUG_LOG(fmt, ...) do {} while (0)
#endif
等等。。。。。。。。。。。。。。
總結
以上是生活随笔為你收集整理的ISO C99中的一些扩展(草稿)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 克鲁格曼:特斯拉在赚钱上不可能成为苹果,
- 下一篇: 腾讯,提前退租!