在存储函数指针时抑制GCC警告
我正在编写一个跨平台的OpenGL函数加载库。在Windows上,编译器(奇怪的是,VS和GCC)似乎可以隐式地将一种函数指针(从在存储函数指针时抑制GCC警告,c,gcc,compiler-warnings,C,Gcc,Compiler Warnings,我正在编写一个跨平台的OpenGL函数加载库。在Windows上,编译器(奇怪的是,VS和GCC)似乎可以隐式地将一种函数指针(从wglGetProcAddress返回的类型是void(*)()转换为另一种函数指针 但是,Linux上的GCC不是glXGetProcAddress将返回一个void(*)(),但它将始终发出警告。由于OpenGL实际上有数千个这样的东西,它加起来就是一个完全无关的巨大的诊断喷涌 有没有办法禁用此特定警告?使用#pragma或某种方式重新排列代码,以便GCC关闭?我
wglGetProcAddress
返回的类型是void(*)(
)转换为另一种函数指针
但是,Linux上的GCC不是glXGetProcAddress
将返回一个void(*)(
),但它将始终发出警告。由于OpenGL实际上有数千个这样的东西,它加起来就是一个完全无关的巨大的诊断喷涌
有没有办法禁用此特定警告?使用
#pragma
或某种方式重新排列代码,以便GCC关闭?我尝试了整个#pragma diagnostic ignore-Wblahblah
,但我找不到与我得到的警告相匹配的“blahblah”。我非常确定您应该使用提供的宏来获取正确的类型。例如,取自OpenGL扩展加载程序(您必须运行python脚本才能生成这样的代码),它的行如下所示:
gl3wBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)get_proc("glBindImageTexture");
<奇特的<代码> pfngLimDigaGeExtEXECUPROC 中间是一个宏,用于正确的函数类型的代码< GLIMDIMAGETGETIONS/<代码>函数(您可以看到它的名称实际上是“代码> P<代码/ OTIN >代码> F < /代码> UNCODO >代码> N< /代码>代码> GLIMDIMAGETEXITION <代码>代码> PROC )。您可能需要签出以处理加载所有those@hexist:是的,我正在尝试,而不是使用它。我不是一个C程序员,但C程序员告诉我,在C中做不必要的显式转换是不好的。你应该让隐式转换系统来处理它。@Nicol:我不确定你是从哪里学来的。在C中,通常应该避免显式地将
void*
强制转换为其他指针类型(例如malloc
的返回值),因为存在从void*
到任何其他数据指针类型的隐式强制转换。然而,函数指针是完全不同的——没有隐式函数指针转换,所以您应该在需要时显式转换(这不应该太频繁,但在这里看起来是一个很好的例子)。