내 전반적인 의견과 C로 작업하기위한 일반적인 경험 법칙 ... 포인터 캐스트를 수행해야하는 경우 스스로 물어보십시오. 정말로해야합니까? 솔직히 포인터 캐스트를해야 할 때가 매우 드뭅니다. 훨씬 더 일반적인 것은 사람들이 이해하는데 약간의 차이가 있기 때문에 포인터 캐스팅을 사용하고, 수행하려고 시도하거나해야하는 작업을 명확하게 알지 못하고 컴파일러 경고를 침묵 시키려고하기 때문입니다.
ptr = (UINT32)malloc(1000);
매우 나쁨! 이 "포인터"로 무엇이든하면 64 비트 플랫폼에서 작동하면 매우 운이 좋을 것입니다. 포인터를 포인터 유형으로 둡니다.절대적으로 정수에 저장해야하는 경우에는 충분히 큰 것으로 보장되는 uintptr_t
을 사용하십시오.
나는 당신이 시도되었을 수 있습니다 말하고 싶지만 :
// Allocate 1,000 32-bit integers
UINT32 *ptr = (UINT32*)malloc(1000 * sizeof(UINT32));
그러나 심지어는 C 코드, 이상한 C 및 C++ 하이브리드에 대한 빈약 한 형태이다. ,
void*
에 캐스팅
이
free((void*)ptr);
또 다른 큰 붉은 깃발되면, 그 자주 기호를
// Allocate 1,000 32-bit integers
UINT32 *ptr = malloc(1000 * sizeof(UINT32));
마지막 : C++과는 달리, C에서 당신은 단지 void *
걸릴 수 있으며 암시 적으로 어떤 포인터 형식으로 가져 저자는 그들이하는 일을 모릅니다.
free(ptr);
'#DEFINE 마감() 고토 피니, '오 주여 자비 – orlp
이 goto''사용하지 마십시오있다 : 당신이 실제 포인터 타입으로
ptr
을 변경하면, 바로 이렇게. 매크로 안에'goto'를 숨기지 마십시오. –이 코드가 컴파일됩니까? 나는 그렇게 생각하지 않는다. –