gpt4 book ai didi

c - 是否可以分配具有强制转换前缀的变量? (在宏内)

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:10 24 4
gpt4 key购买 nike

有时在宏中进行赋值很有用,但这可以通过强制转换来避免,例如:

#define SAFE_FREE(v) do { free(v); v = NULL; } while (0)

/* example use */
SAFE_FREE(foo);

但是,如果“foo”是“const int *”,则需要强制转换。

free((void *)foo);  /* OK */

但由于类型转换和作业的原因,这失败了

SAFE_FREE((void *)foo);

给出警告:错误:左值需要作为赋值的左操作数

一种可能的解决方案是在宏中进行转换:例如,

#define SAFE_FREE(v) do { free((void *)v); v = NULL; } while (0)

但我不希望在宏中强制转换,因为这最终可能会隐藏它应该发出警告的情况。


有没有办法在恰好有强制转换前缀的宏中分配一个变量?

最佳答案

问题可能出在宏部分 v=NULL 上,因为 foo 是常量。你能把 foo 改成 int* 吗?

关于c - 是否可以分配具有强制转换前缀的变量? (在宏内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28756785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com