c - 如何使编译器不显示为 void pointer cast 警告

标签 c gcc void-pointers

我有一些代码可以进行大量从 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/

相关文章:

调用结构数组,是否返回指针数组?

c - 自动调整显示类型

gcc 输出的目标文件是否可以在具有相同选项的相同源的编译之间变化?

c - 使用指向数组的空指针

c - 当我们将 "if(ptr==NULL)"用作整数指针 ptr 时,NULL 指针是否隐式转换为类型 (int*)?

c - 当X不能被N整除时如何进行计算

c++ - gcc thunk hack 用于多重继承

c - "Array index in initialiser exceeds array bounds"

c - 错误 C2036 : 'void *' : unknown size

c - 如何在C中调用函数