Chinaunix首页 | 论坛 | 博客
  • 博客访问: 163092
  • 博文数量: 25
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-12 21:27
文章分类

全部博文(25)

文章存档

2015年(2)

2014年(1)

2013年(22)

我的朋友

分类: C/C++

2013-05-18 14:12:11

 





#include

/*
 *typedef
 *typedef只是给一个类型命名一个别名,不是产生一个新的类型
 *在这个例子中,是将struct _struct_test这个结构体类型起个别名叫struct_test
 */
typedef struct _struct_test
{
    int a;
    char b;
    double c;
    float d;
    void (*fun)();
}struct_test;

/*
 *__FILE__宏是表示当前文件名
 *__LINE__宏是表示当前行数
 *__FUNCTION__宏是表示当前函数
 */
void fun_1()
{
    printf("%s %d %s\n",__FILE__,__LINE__,__FUNCTION__);
}

void fun_2()
{
    printf("%s %d %s\n",__FILE__,__LINE__,__FUNCTION__);
}


/*
 *这种结构体复制方式是我们在平时少见的,但是在linux内核里却是非常多的,
 *这个方式是不要管各个变量在结构体中的原有位置的先后关系的。
 */
struct_test s_t_1 =
{
    .a = 1,
    .b = '1',
    .c = 11.11f,
    .d = 1.1f,
    .fun = fun_1,
};

/*
 *这种结构体复制方式是我们在平时少见的,但是在linux内核里却是非常多的,
 *这个方式是不要管各个变量在结构体中的原有位置的先后关系的。
 */
struct_test s_t_2 =
{
    a : 2,
    b : '2',
    c : 22.22f,
    d : 2.2f,
    fun : fun_2,
};

/*
 *只是定义一个宏而已
 */
#define LINE_SPERATOR printf("======================================================\n");

/*
 *这里要注意的是##符号的用法
 *##符号在宏中是将##其后的变量和前面的字符串连接
 *本例中当i位1时表示s_t_1这个变量
 */
#define PRINT_ARGS(i) printf("%d %c %f %lf\n",s_t_##i.a,s_t_##i.b,s_t_##i.c,s_t_##i.d);
#define CALL_FUN(i) s_t_##i.fun();

int main(int argc,char *argv[])
{
    LINE_SPERATOR
    PRINT_ARGS(1)
    CALL_FUN(1)


    LINE_SPERATOR
    PRINT_ARGS(2)
    CALL_FUN(2)

    return 0;
}
阅读(1366) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:c语言特殊语法(二)调试

给主人留下些什么吧!~~