首页
社区
课程
招聘
[旧帖] [求助]结构体成员访问操作符.和->的对象加括号后VC报语法错误 0.00雪花
发表于: 2009-9-17 19:09 1471

[旧帖] [求助]结构体成员访问操作符.和->的对象加括号后VC报语法错误 0.00雪花

2009-9-17 19:09
1471
求助事情: 结构体成员访问操作符.和->的对象加括号后VC报语法错误,查过K&R的黑皮书,C缺陷和陷阱,C专家编程,CSDN,MS和IBM的网站都没有找到相关的语言宪法。
出错信息: error C2059: syntax error : '('
编译环境: VC 6.0
问题背景: 做过一个代码静态检查相关的项目,为了提高代码健壮性,将宏的伪参数都加上了括号,但是有一个宏做的比较特别,它的参数是结构体的成员变量,加上括号后编译报错(当时用的编译环境是gcc)。
相关代码:
#include <stdio.h>

struct tag
{
        int a;
        int b;
};

int main(int argc, char *argv[])
{
        struct tag var = {1,2};
        struct tag *op = &var;
       
        int i = op->a;   //(op)->a; OK  op->(a); NG
        int j = var.b;    //(var).b;   OK   var.(b); NG
       
        printf("%d\t%d\n", i,j);
        return 0;
}
拜托了。我就是想要个说法,哪条C标准或者哪本书上第几页有说过结构体操作符.和->后的变量不能用括号括起来。拜托各位了
P.S. 虽然是新人交流区,相信其中也一定有高手,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
钻这种牛角尖有意思么。。可能是优先顺序被打乱了吧。。不清楚。
2009-9-17 19:21
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
expression–>identifier
没说 -> 的右边也可以是表达式吧
2009-9-17 20:18
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
指针是一个值, 可以是表达式,因此可以使用括号括起来,而成员是按名字引用的,它不是值,因此不能用括号括起来。var.a中a是结构的成员名字,它不是值,而var.(a)使得(a)变成了一个值,var.(a)没有意义。如果你用C++模式编译,op->(a)应该得到不同的错误代码,这是由于->操作符可以重载,因此op->(a)从形式是可以合法的, 只要op的类型定义了以a类型的为操作数的->操作符。
2009-9-17 20:39
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢大家的关注,尤其感谢4楼这位叫半道出家的朋友耐心回答:“成员是按名字引用的,它不是值,因此不能用括号括起来”,也就是说括号的对象范围可以是表达式,可以是某个值,但不能是成员是吧。收到,谢谢!
2009-9-17 22:02
0
游客
登录 | 注册 方可回帖
返回
//