__builtin_bswap16
과 같은 내장 함수가 컴파일러에서 제공되는지 여부를 어떻게 판단 할 수 있습니까? 이 함수가 선행 처리기를 사용하여 존재하는지 여부를 확인할 수 있습니다.C/전처리 기 : __builtin 함수를 사용할 수 있는지 확인하십시오.
필자의 특별한 경우, 32- 비트 용으로 컴파일 할 때 GCC 4.x에서 잘 작동하는 내 코드에 __builtin_bswap16
/32/64 기능을 사용하고있었습니다. 나중에 나는 64 비트 리눅스로 전환하고 __builtin_bswap16
이 갑자기 사라진 것을 발견 - 나는 링커 오류 접수 :
"undefined reference to `__builtin_bswap16'".
I이 64 비트 모드에서 특정 ASM 운영의 가용성을 함께 할 수있는 뭔가가 생각합니다.
나중에이 코드를 불행히도 GCC의 이전 버전 만 설치되어 있고이 기능을 전혀 지원하지 않는 다른 컴퓨터에서이 코드를 컴파일하려고했습니다.
이 코드는 어디서나 컴파일 할 수 있으며, 제공된 경우 __builtin_bswap
함수를 사용하고 손으로 코드화 된 byteswap
루틴으로 변환합니다. 그냥 전 처리기로 어떻게 든 이걸 달성 할 수 있습니까?/64분의 32 __builtin_bswap16
항상 undefined로 평가로
내 명백한 시도, 예컨대 :
...
#define MYBSWAP16(v) (v>>8)|(v<<8)
#ifdef __builtin_bswap16
printf("bswap16 is defined : %04x\n", __builtin_bswap16(0x1234));
#else
printf("bswap16 is not defined : %04x\n", MYBSWAP16(0x1234));
#endif
...
는 실패했습니다. C 소스 내에서 자동으로 작동하도록하는 방법이 있습니까, 아니면 Makefile에 수동으로 상수를 정의하는 유일한 방법입니다. HAVE_BSWAP
을 입력하고 -D
옵션을 통해 전달 하시겠습니까?
제 질문은 반드시 __builtin_bswap
과 관련이 없으므로 특정 기능을 사용할 수 있는지 감지하는 일반적인 방법을 찾고 있습니다.