함수 포인터와 객체 포인터 사이의 캐스트는 일반적으로 정의되지 않은 동작이지만 POSIX (참조 : dlsym 참조) 및 WinAPI (참조 : GetProcAddress 참조)에는이 기능이 필요합니다. GCC가 함수 포인터에 관해 경고합니다.
이를 감안할 때, 이러한 코드는 함수 포인터와 객체 포인터는 정말 관련이 호환되지 않는 플랫폼으로, 어쨌든 이동성을 플랫폼 고유의 API를 목표로하고 있다는 사실을 주어진.그러나 어쨌든 그것에 대해 경고 -Wpedantic 및 #pragma GCC diagnostic ignored "-Wpedantic"
아무런 효과가 없습니다 : 나는 그것이 좋은 경고를주지 않기 때문에 -Wpedantic이 활성화 유지하려는
warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [enabled by default]
을,하지만 난 싶지 않아 실제 경고 및 오류가 객체 포인터 캐스트에 대한 함수 포인터와 관련이없는 경고의 바다에서 사라지도록하는 것입니다.
이 작업을 수행 할 수있는 방법이 있나요? (-Wpedantic와)
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;
}
방출 :
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
게시 할 수있는 경고를 생성 한 * 코드 *가 있습니까? – WhozCraig
@WhozCraig 질문에 추가됨. –