函數指針和對象指針之間顯然鑄造是一般意義上的不確定的行爲,但POSIX(參見:dlsym)和WinAPI的(參見:GetProcAddress)要求這一點。GCC發出警告函數指針對象的指針鑄造
鑑於此,並且考慮到此類代碼無論如何都針對特定於平臺的API,因此其對於函數指針和對象指針不兼容的平臺的可移植性實際上是無關緊要的。
但-Wpedantic警告一下也無妨,而且#pragma GCC diagnostic ignored "-Wpedantic"
沒有影響:
warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [enabled by default]
我想保持-Wpedantic啓用,因爲它提供良好的警告,但我不希望在有關指向對象指針轉換的函數指針的無關警告的海洋中,失去真正的警告和錯誤。
有沒有辦法做到這一點?
在Windows(MinGW的)運行GCC 4.8.0:
gcc (rubenvb-4.8.0) 4.8.0
代碼示例
#include <windows.h>
#include <iostream>
int main (void) {
std::cout << *reinterpret_cast<int *>(GetProcAddress(LoadLibraryA("test.dll"),"five")) << std::endl;
}
發出(與-Wpedantic):
warning_demo.cpp: In function 'int main()':
warning_demo.cpp:7:87: warning: ISO C++ forbids casting between pointer-to-funct
ion and pointer-to-object [enabled by default]
std::cout << *reinterpret_cast<int *>(GetProcAddress(LoadLibraryA("test.dll"),
"five")) << std::endl;
^
我從來沒有遇到過轉換'GetProcAddress'的結果的問題。 – chris
您是否有任何* code *產生了您可以發佈的警告? – WhozCraig
@WhozCraig添加到問題。 –