Jea*_*lho 9 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
Run Code Online (Sandbox Code Playgroud)
但是当我编译我得到一个bajillion
warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
Run Code Online (Sandbox Code Playgroud)
警告.是否有一面旗帜告诉gcc不打印此特定警告?
我正在和-Wall进行编译,所以我不确定我是否能够轻松地让它消失
Dan*_*imm 16
为了那些可能正在寻找像我这样的答案的人:
如果你不想添加一个额外的编译标志,因为你可能会在其他地方意外地将一个面试转发到一个void*,你可以使用下面的片段强制从一个int转换为void*你确定你希望它发生,然后编译器不会错误的演员:
#define INT2VOIDP(i) (void*)(uintptr_t)(i)
Run Code Online (Sandbox Code Playgroud)
当然一定要包含stdint.h,这样你就可以做到以下几点:
void *val = INT2VOIDP(5);
Run Code Online (Sandbox Code Playgroud)
显然只是采取编译器给你的标志并在它前面拍了一个"不"就行了!
-Wno-int-to-void-pointer-cast
Run Code Online (Sandbox Code Playgroud)
小智 7
你可能想要使用'size_t'.
例如,如果你有int i和void*a,
i = (void *) a; 会给你那个警告
避免这个添加size_t
i = (void *) (size_t) a;