有时在宏中进行赋值很有用,但这可以通过强制转换来避免,例如:
#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/