资源简介
我的博客《百尺竿头更进一步——编译器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
- 上一篇:基于C++的学生选课系统
- 下一篇:Visual C++从入门到精通第三版.pdf
相关资源
- gcc对应rpm安装包_4_4_7.zip
- gcc.tar(gcc-4.8.5-39.el7.x86_64.rpm)
- Dev-Cpp 5.11 TDM-GCC 4.9.2
- gcc-3.4.6.rpm完整包
- MinGw5.14包含内容
- Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.zip
- gcc-4.8.5 含依赖完整RPM安装包centos7
- MinGW编译环境,包含gcc、g++、gdb等编译
- centOS7安装nginx安装包以及所有依赖包
- tdm64-gcc-9.2.0.exe
- Windows(Win10/8/7)环境GCC编译器
- sqlite3.a sqlite3.def sqlite3.h sqlite3.dll库文
- libstdc++.so.6.0.17
- Visual Studio 2017 编译器MSBuild Tools 离线
- gcc-c++-3.4.6-8.x86_64.rpm
- libstdc++.so.6.0.17/20/21
- gcc-c++-3.4.6-3.1.x86_64 pdksh-5.2.14-30.x86_6
- GCC for windows MinGW 全套安装文件
- gcc-c++rpm安装包centos7
- gcc-c++-4.8.5-36.el7.x86_64.rpm
- Editplus+GCC/VC6 编译环境
- gcc工具:Linux-objdump
- c语言编译器 gcc
- editplus+gcc
评论
共有 条评论