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

标签 c casting macros

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

#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/

相关文章:

C++ 宏扩展器

c - 如何为特定部分构建大量全局数据?

c - 在 C 中用其对应的字符串替换预定义的整数

c# 转换为从类型名获取的类型作为字符串

java - java bukkit 将字符串转换为 ItemStack

c - 将 XOR 作为宏实现,但未按预期工作

ios - 定义基于 BOOL 的常量

从用户程序控制 TCP header 字段

c - 如何在main()之外使用 `malloc`?

c++ - 在 C++ 中解析字符串