Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在存储函数指针时抑制GCC警告_C_Gcc_Compiler Warnings - Fatal编程技术网

在存储函数指针时抑制GCC警告

在存储函数指针时抑制GCC警告,c,gcc,compiler-warnings,C,Gcc,Compiler Warnings,我正在编写一个跨平台的OpenGL函数加载库。在Windows上,编译器(奇怪的是,VS和GCC)似乎可以隐式地将一种函数指针(从wglGetProcAddress返回的类型是void(*)()转换为另一种函数指针 但是,Linux上的GCC不是glXGetProcAddress将返回一个void(*)(),但它将始终发出警告。由于OpenGL实际上有数千个这样的东西,它加起来就是一个完全无关的巨大的诊断喷涌 有没有办法禁用此特定警告?使用#pragma或某种方式重新排列代码,以便GCC关闭?我

我正在编写一个跨平台的OpenGL函数加载库。在Windows上,编译器(奇怪的是,VS和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*
到任何其他数据指针类型的隐式强制转换。然而,函数指针是完全不同的——没有隐式函数指针转换,所以您应该在需要时显式转换(这不应该太频繁,但在这里看起来是一个很好的例子)。