|
在http://www.linuxsir.cn/bbs/thread316904.html提过类似的问题
现在看起来不是作用域的问题...
这个代码还是出错的:
#include <stdio.h>
#include <stdlib.h>
#define FOO(T, DATA) ((T)({ \
*m_data = DATA ; \
*m_data; \
}))
struct _m{
int id;
char name[16];
};
int main(){
struct _m mm={1, "shellex"};
struct _m *m_data = (struct _m *) malloc(sizeof (struct _m ));
printf("name = %s\n", FOO(struct _m, mm).name);
free(m_data);
return 0;
}
但是这个用第三个参数接受地址就没问题:
#include <stdio.h>
#include <stdlib.h>
#define FOO(T, DATA, buf) { \
*m_data = DATA ; \
buf = m_data; \
}
struct _m{
int id;
char name[16];
};
int main(){
struct _m mm={1, "shellex"}, *buf;
struct _m *m_data = (struct _m *) malloc(sizeof (struct _m ));
FOO(struct _m, mm, buf);
printf("name = %s\n", buf->name);
free(m_data);
return 0;
}
为什么呢...?请大家赐教... |
|