LinuxSir.cn,穿越时空的Linuxsir!

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

请教高手中的高手

[复制链接]
发表于 2005-8-11 09:21:59 | 显示全部楼层 |阅读模式
宏定义 如下:
POINTER_CHANGE((A)(*B)) (A*)(B)
用GCC4.0编译:
    POINTER_CHANGE(SP16 *,cbuf) =
                  (SP16 *)mymalloc(sizeof(SP16) * c_length);
  为什么 会报错 :错误:赋值的左值无效
这句也是 啊
   POINTER_CHANGE(SP16 *,swapbuf) = NULL;
发表于 2005-8-11 09:51:49 | 显示全部楼层
我不是高手,更不是高手中的高手。
gcc-4对左值的限制确实严格了很多,这么写是不合法的了。
回复 支持 反对

使用道具 举报

发表于 2005-8-11 13:18:29 | 显示全部楼层
what about gcc-3.3?
回复 支持 反对

使用道具 举报

发表于 2005-8-11 16:21:29 | 显示全部楼层
我请教过众高手了
宏定义 如下:
POINTER_CHANGE((A)(*B)) (A*)(B)


没人看得懂这个
回复 支持 反对

使用道具 举报

发表于 2005-8-11 17:47:29 | 显示全部楼层
Post by x11
我请教过众高手了


没人看得懂这个


我也看不懂,这么说我也是高手了?
感觉GCC4.0比GCC3.X要求要高一点,前段时间在tiger里面用GCC4.0编译monkey's audio codec时,报了几个warning,说是pFP的操作可能未定义,但是在GCC3.3下就完全正常.也懒得改了,反正没有问题的.
  1. [color=blue]
  2. int *pFP;
  3. ...
  4. *pFP-- = *(pFP - 1);
  5. ...
  6. [/color]
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-8-11 18:48:29 | 显示全部楼层
Post by jiangn
  1. [color=blue]int *pFP;
  2. ...
  3. *pFP-- = *(pFP - 1);
  4. ...[/color]
复制代码

这个在gcc-4里还可以通过的,但类似
  1. [color=blue]int *p;
  2. *((char *)p) = 1;[/color]
复制代码

这样的代码是被禁止使用的。
回复 支持 反对

使用道具 举报

发表于 2005-8-11 21:15:31 | 显示全部楼层
Post by gamedragon
这个在gcc-4里还可以通过的,但类似
  1. [color=blue]int *p;
  2. *((char *)p) = 1;[/color]
复制代码

这样的代码是被禁止使用的。


试了一下:照样通过 (g++-4.0)
回复 支持 反对

使用道具 举报

发表于 2005-8-12 01:34:26 | 显示全部楼层
Post by camlee0131203
宏定义 如下:
POINTER_CHANGE((A)(*B)) (A*)(B)
用GCC4.0编译:
    POINTER_CHANGE(SP16 *,cbuf) =
                  (SP16 *)mymalloc(sizeof(SP16) * c_length);
  为什么 会报错 :错误:赋值的左值无效
这句也是 啊
   POINTER_CHANGE(SP16 *,swapbuf) = NULL;


应该是:
#define POINTER_CHANGE    ((A*) (B)) (A*) (B)

这么简单的cast,为什么用宏呢?直接用:
static_cast<A*> B不就的了?
回复 支持 反对

使用道具 举报

发表于 2005-8-12 08:27:43 | 显示全部楼层
这个MS是C++
上面那个可能是C的

Post by bookstack
应该是:
#define POINTER_CHANGE    ((A*) (B)) (A*) (B)

这么简单的cast,为什么用宏呢?直接用:
static_cast<A*> B不就的了?
回复 支持 反对

使用道具 举报

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

本版积分规则

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