2
함수 콜백과 함께 작동하는 라이브러리를 작성하면서 동일한 호출 규칙과 동일한 시그니처가있는 유형에 함수 포인터를 자주 형변환 (및 호출)했습니다 다른 유형 (모든 데이터) 또는 void 포인터. 기본적으로 https://stackoverflow.com/a/14044244/3079266C 함수 포인터 유형 호환성
, 내가 그것을 이해로, 인수의 유형이 호환되는 경우, 즉 함수 포인터 타입도 호환 의미
최근, 나는이에 따라, 그 안전하지 않을 수 있다는 것을 발견 , 아무런 문제가 없어야합니다.
이제 3 가지 질문이 있습니다.
첫 번째 : 다른 유형의 포인터가 기술적으로 호환되지 않기 때문에 정의되지 않은 동작이 발생할 수 있습니다.
둘째로 : (어떤 아키텍처에서) 내가 그걸 가지고 도망 갈 수 있습니까? Windows x86 또는 x64 버전이 있습니까?
셋째 : 어디에서 벗어날 수 있습니까?
@iharob 그러나 이러한 함수에 전달하는 함수 포인터는 반드시 'void'포인터를 가져와야합니다. 그렇지 않으면 정의되지 않은 동작이 발생합니다. 함수 내부에 포인터를 캐스팅하는 것은 괜찮지 만 인수는 지정된대로 지정해야합니다. –
첫 번째 질문 : 예. 두 번째 질문 : 모든 곳. 세 번째 질문 : 아무데도 (당신이 SO 질문에 대답 할 때를 제외하고, 여기 사람들은 UB를 사랑하고 필요하다면 언급하지 않으면 당신을 찬성표를 던집니다.) –
@barakmanos : 그렇습니다. 사용자에게 UB가 발생할 수 있다고 경고해야하지만 실제로는 그렇지 않습니까? 감사! =) – Mints97