我有一些代码可以进行大量从 int 到 void* 的转换,反之亦然(我不在乎它是否丑陋。我喜欢通用的东西)
例子:
typedef struct _List {
long size;
long mSize; // Max size
void** elementArray;
}List;
List l;
...
int i = 2;
l.elementArray[i] = i; // Intentional usage of pointer as integer
// Actual size of pointer does not matter
但是当我编译时我得到了一个 bajillion
warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
警告。 是否有标志告诉 gcc 不要打印此特定警告?
我正在使用 -Wall 进行编译,所以我不确定是否可以轻松解决这个问题
最佳答案
为了其他可能像我一样寻找答案的人:
如果您不想添加额外的编译标志,因为您可能在其他地方不小心将 int 向上转换为 void*,您可以使用以下代码片段强制从 int 转换为 void*,其中你确定你希望它发生,然后编译器不会对你的强制转换产生错误:
#define INT2VOIDP(i) (void*)(uintptr_t)(i)
当然一定要包含stdint.h,这样你就可以做到以下几点:
void *val = INT2VOIDP(5);
关于c - 如何使编译器不显示为 void pointer cast 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22751762/