다음 코드를 실행 한 후 SIGILL이 표시됩니다. 나는 그것이 무엇이 잘못되었는지를 정말로 알 수 없다.float에서 고정 전환으로 SIGILL 받기
대상 플랫폼은 ARM, 그리고 나는 포트 (이 코드가 포함되어있는) 알려진 라이브러리
void convertFloatToFixed(float nX, float nY, unsigned int &nFixed) {
short sx = (short) (nX * 32);
short sy = (short) (nY * 32);
unsigned short *ux = (unsigned short*) &sx;
unsigned short *uy = (unsigned short*) &sy;
nFixed = (*ux << 16) | *uy;
}
이 거기에 어떤 도움을 크게 감상 할 수 노력하고있어. 사전에
덕분에
첫 번째 캐스트의 경우 'static_cast'와 같은 이름의 캐스트를 선호하고 'short sx = static_cast (nX * 32)'및 'unsigned short ux = reinterpret_cast < 서명되지 않은 짧은 &>(sx);' –
GManNickG
나는 마지막 줄까지 SIGILL의 원인을 찾아 냈지만 이유를 이해할 수는 없다. 거기에 문제가 있습니까? – foliveira
스택에 반송 주소를 불어 넣는 나쁜 코드 생성을 추측합니다. 코드는 컴파일러가 스스로 멈출 수있게 해주는 많은 로프를 제공합니다. 포인터 캐스트를 없애기 시작하면 간단한 캐스트가 수행합니다. –