分類: 漫談c語言
2011-12-04 12:43
488人閱讀收藏
舉報cstruct
linux核心
initialization
gcc編譯器
前言:計算機語言是編譯器和程式設計師交流的依據和規範,gnu c是gcc特有的功能,在linux核心中被廣泛應用。
幫助文件:
在gnu c中,可以在結構體中宣告某個聯合體(或結構體)而不用指出它的名字,如此之後就可以像使用結構體成員一樣直接使用其中聯合體(或結構體)的成員。
舉例,如test.c:
[cpp]view plain
copy
#include
struct
test_struct ;
intnum;
};
intmain(
void
) ;
printf("test_struct.gender = %c, test_struct.id = %d\n"
, test_struct.gender, test_struct.id);
return
0;
}
例子輸出結果:
[cpp]view plain
copy
test_struct.gender = f, test_struct.id = 70
例子中的第17行,結構體變數test_struct直接使用聯合體中的成員gender或id。
gcc預設情況下可以使用gnu c的各種擴充套件功能,如果上例使用c99標準編譯的話,會產生以下的錯誤:
[cpp]view plain
copy
$ gcc -std=c99 test.c -o test
[cpp]view plain
copy
test.c:8:6: warning: declaration does not declare anything
test.c: in function 'main'
: test.c:14:12: warning: excess elements in struct
initializer
test.c:14:12: warning: (near initialization for
'test_struct'
) test.c:17:17: error: 'struct test_struct'
has no member named
'gender'
test.c:17:37: error: 'struct test_struct'
has no member named
'id'
修改上例,使其符合c99標準,如test01.c:
[cpp]view plain
copy
#include
union
test_union ;
struct
test_struct ;
intmain(
void
) ;
printf("test_struct.test_union.gender = %c, test_struct.test_union.id = %d\n"
, test_struct.test_union.gender, test_struct.test_union.id);
return
0;
}
例子輸出結果:
[cpp]view plain
copy
$ gcc -std=c99 test01.c -o test01
[cpp]view plain
copy
test_struct.test_union.gender = f, test_struct.test_union.id = 70
在linux核心中常用匿名聯合(或結構體),如在linux-2.6.38.8/fs/sysfs/sysfs.h檔案中struct sysfs_dirent結構體的定義:
[cpp]view plain
copy
struct
sysfs_dirent ;
unsigned int
s_flags;
unsigned short
s_mode;
ino_t s_ino;
struct
sysfs_inode_attrs *s_iattr;
};
例解GNU C之typeof 一)
前言 計算機語言是編譯器和程式設計師交流的依據和規範,gnu c是gcc特有的功能,在linux核心中被廣泛應用。幫助文件 關鍵字typeof用於獲取表示式的資料型別。簡單例子,如清單1 cpp view plain copy char chptr01 typeof chptr01 ch 等價於ch...
grep 高階例解
grep 是在linux查詢文字過程最常用的命令,熟悉grep的一些常用命令,可以在個別時候有效提高工作效率。場景一 需要查詢乙個目錄及子目錄所有檔案中出現 aaa 但是同時不能出現bbb的行,查詢不區分大小寫 grep rin aaa grep v bb 解釋 r 遞迴查詢 i 不區分大小寫 n ...
PHP匿點之位運算按位取反
我們看示例 a 8 var dump a 先不要看結果,試想下結果是多少?然後我們執行下看看,納尼?和我們設想的不一樣,奇怪了 什麼原因呢 於是我們翻看php中文手冊 a not 按位非 將 a 中為 0 的位設為 1,反之亦然。我只是簡單的理解為 0變1,1變0。原來按位取反以十進位制輸出並不是簡...