LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 902|回复: 3

一个和宏有关的问题[解决!]

[复制链接]
发表于 2007-11-14 17:40:00 | 显示全部楼层 |阅读模式
一个和宏有关的问题。简化成这样:
#include <stdio.h>

#define FOO(T, DATA) ((T)({  \
    T m_data = DATA ;             \
    m_data;                             \
}))

struct _m{
    int id;
    char name[16];
};

int main(){
    struct _m mm={1, "shellex"};
    printf("id = %d\n", FOO(struct _m, mm).id);
    printf("name = %s\n", FOO(struct _m, mm).name);
    return 0;
}

编译连接,输出:

shellex@sx_linux:~/Desktop$ ./main
id = 1
段错误 (core dumped)
请问大家是为什么呢?

    printf("name = %s\n", FOO(struct _m, mm).name);
改成
    printf("name = %c\n", FOO(struct _m, mm).name[0]);
是没问题的嗯
发表于 2007-11-14 18:04:57 | 显示全部楼层
看不懂,打算干嘛呢
回复 支持 反对

使用道具 举报

发表于 2007-11-14 19:48:34 | 显示全部楼层
随便写了两个类似的错误,

  1. int * fn(void)
  2. {
  3.   int x;
  4.   return &x;
  5. }
复制代码

  1. int main(void)
  2. {
  3.   int * p;
  4.   {
  5.     int x;
  6.     p = &x;
  7.   }
  8.   *p = 0;
  9.   return 0;
  10. }
  11. }
复制代码

要是楼主能想明白上面这两个例子中的错误, 就可以明白自己的问题了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-14 20:12:54 | 显示全部楼层
Post by remote fish;1782409
随便写了两个类似的错误,

  1. int * fn(void)
  2. {
  3.   int x;
  4.   return &x;
  5. }
复制代码

  1. int main(void)
  2. {
  3.   int * p;
  4.   {
  5.     int x;
  6.     p = &x;
  7.   }
  8.   *p = 0;
  9.   return 0;
  10. }
  11. }
复制代码

要是楼主能想明白上面这两个例子中的错误, 就可以明白自己的问题了.


一语道醒我哪~谢谢谢谢。局部变量,作用域...低级错误..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表