91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

我的博客《百尺竿頭更進一步——編譯器gcc對c語言的擴展》的附件

資源截圖

代碼片段和文件信息

#include?
#include?
?#include?
int?foo()
{

return?1;
}
/*
*將表達式的擴展
*/
#define?stats()?({int?i=foo();i;})

/*
*局部標記的使用?__label__?的定義
*/
int?local_label(int?iint?type)
{
__label__?do_add?do_subdo_multido_div;
switch(type){
case?1:
goto?do_add;
case?2:
goto?do_sub;
case?3:
goto?do_multi;
case?4:
goto?do_div;
}
do_add:
return?i++;
do_sub:
return?i--;
do_multi:
return?i*i;
do_div:
return?1/i;
}
/*
*將標簽當作變量來使用標簽被以“&&“開頭來引用被以“void*“的指針來指向,被goto時需要用*來得到其值
*/
int?label_val(int?iint?type)
{
? void*?label_array[]={?&&do_add?&&do_sub&&do_multi&&do_div};

goto?*label_array[type];
do_add:
return?i++;
do_sub:
return?i--;
do_multi:
return?i*i;
do_div:
return?1/i;
}
/**
*內部函數,在函數內部定義函數
*1.內部函數可以使用函數定義的局部變量。
*2.如果先聲明,再定義,需要用auto來聲明。
*3.如果內部函數需要被外部使用,可以以函數指針的形式被引用。
*/
int?nested_func(int?aint?b)
{
auto?int?add();
int?do_add(int(*add)()){
return?add();
}
int?c?=?do_add(add);
if(c>0)
return?c;
else
return?0;
int?add(){?return?a+b;}
}
/**
*內置函數(?built-in?functions?)
*void?*?__builtin_apply_args?()
*/
void?error(const?char*?fmt?...)?{
????void?*args?=?__builtin_apply_args();
?
????fprintf(stderr?“error:?“);
????fflush(stderr);
????__builtin_apply(printf?args?100);
}

int?built_func(int?a)
{
error(“input?a:%d\n“a);
return?a;
}
/**
*內置函數得到調用者的信息,用于調試系統
*/
void?built_func_caller()
{
printf(“caller?0:0x%x\n“?__builtin_return_address(0));
printf(“caller?1:0x%x\n“?__builtin_return_address(1));
}
/**
*typeof的使用,獲取變量的類型。
*/
#define?max(ab)?\
???????({?typeof?(a)?_a?=?(a);?\
???????????typeof?(b)?_b?=?(b);?\
?????????_a?>?_b???_a?:?_b;?})
#define?Max(ab)?((a)>(b)?(a):(b))
/*
*擴展標準c表達式的靈活處理
*1.結構體與數組的初始化
*2.case?語句的連續表示
*3.“?:“運算符的簡化
*4.長度為0的數組:定義時,節約空間
*5.長度可變的數組
*6.可變參數的宏定義
*7.數組非常量初始化
*8.靈活的動態數據轉換
*9.混合聲明與定義
*10.offsetof(typemember)的使用:得到member在結構體type中的偏移(stddef.h)中定義,
*一個重要的實例——container_of(通過局部指針得到整體指針)在linux內核中,鏈表的使用。
*/
/*
*?container_of?-?cast?a?member?of?a?structure?out?to?the?containing?structure
?*?@ptr: the?pointer?to?the?member.
?*?@type: the?type?of?the?container?struct?this?is?embedded?in.
?*?@member: the?name?of?the?member?within?the?struct.
*/
#define?container_of(ptr?type?member)?({ \
const?typeof(?((type?*)0)->member?)?*__mptr?=?(ptr); \
(type?*)(?(char?*)__mptr?-?offsetof(typemember)?);})

??#define?debug(format?...)?fprintf?(stderr?format##?__VA_ARGS__)
??#define?warning(format0args...)?fprintf(stdoutformat0?args)
void?basic_extend()
{
int?array[5]?=?{[2]=1[3?...?4]=3};

?struct?point?{?int?x?y;?};
?struct?point?p0?=?{
? .x?=?5
? .y?=6
?};
int?i?=0;
int?v?=?8?;
for(i=0;i<5;i++){
switch(i){
case?1?...?3?:
?v?=?array[i];
break;
case?4:
?v?=?array[i]?:p0.y;
break;
}
}
struct?line?{
int?len;
char??p[0];
};
struct?line?*one;
int?len?=?5;
one?

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-12-24?17:25??asm匯編\
?????文件?????2176412??2014-12-06?16:06??asm匯編\asm.tar.bz2
?????文件??????116616??2014-06-20?16:17??asm匯編\gas_manual-unix匯編.pdf
?????文件????11238367??2014-06-20?16:17??asm匯編\IBM.PC.匯編語言程序設計(第五版)完整版.pdf
?????文件??????846920??2014-06-20?16:17??asm匯編\pcasm-book-x86匯編.pdf
?????目錄???????????0??2014-12-24?17:23??gcov\
?????文件?????????185??2014-12-19?14:45??gcov\gcov-c.c
?????文件?????????558??2014-12-24?16:50??gcov\gcov-c.c.gcov
?????文件?????????160??2014-12-24?17:16??gcov\makefile
?????文件????????6271??2014-12-18?22:02??gnu-c.c

評論

共有 條評論