2

我正在编写一个跨平台的 OpenGL 函数加载库。在 Windows 上,编译器(奇怪的是,VSGCC)似乎很好地将一种函数指针(从wglGetProcAddressa的返回类型void(*)())隐式转换为另一种类型的函数指针。

然而, Linux上的 GCC不是。glXGetProcAddress将返回 a void(*)(),但它总是会发出警告。而且由于 OpenGL 确实有成千上万个这样的东西,它加起来是一个完全无关紧要的巨大诊断喷涌。

有没有办法禁用这个特定的警告?通过某种#pragma或某种方式重新排列代码以使 GCC 关闭?我尝试了整个#pragma diagnostic ignore -Wblahblah,但我找不到与我收到的警告相匹配的“blahblah”。

4

1 回答 1

3

我很确定您应该使用提供的宏来获取正确的类型。例如,取自gl3w OpenGL 扩展加载程序(您必须运行 python 脚本才能让它生成这样的代码),它的行如下所示:

gl3wBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)get_proc("glBindImageTexture");

中间那个奇怪PFNGLBINDIMAGETEXTUREPROC的是函数的正确函数类型的宏glBindImageTexture(你可以看到它的名字实际上是Pointer Functio N GLBINDIMAGETEXTURE PROC)。

于 2012-10-24T17:43:02.353 回答