gcc에서 -ansi 스위치를 써서 엄격한 ANSI 표준 모드로 컴파일하면, GNU 확장 기능은 사용할 수 없게 됩니다. asm과 같은 인라인 어셈블리가 거기 해당하지요. 하지만 __asm__은 여전히 사용할 수 있습니다.
volatile은 이미 ANSI 표준의 일부이므로 asm과는 다릅니다만, ANSI 이전의 소스에서 volatile을 다른 용도로 전용해서 사용하는 경우가 있습니다. 예를 들어 ANSI 소스를 K&R 모드로 컴파일하기 위해
#define volatile
로 volatile 명령을 무효화시키는 경우가 있죠. 이게 로컬로 정의되어 있으면 문제가 없는데, 헤더에 정의되어 있으면 내가 만든 소스(ANSI 표준을 따르는)에까지 영향을 끼치게 됩니다. 이때 __volatile__을 쓰면 문제없이 쓸 수 있습니다.
gcc에서 -ansi 스위치를 써서 엄격한 ANSI 표준 모드로 컴파일하
gcc에서 -ansi 스위치를 써서 엄격한 ANSI 표준 모드로 컴파일하면, GNU 확장 기능은 사용할 수 없게 됩니다. asm과 같은 인라인 어셈블리가 거기 해당하지요. 하지만 __asm__은 여전히 사용할 수 있습니다.
volatile은 이미 ANSI 표준의 일부이므로 asm과는 다릅니다만, ANSI 이전의 소스에서 volatile을 다른 용도로 전용해서 사용하는 경우가 있습니다. 예를 들어 ANSI 소스를 K&R 모드로 컴파일하기 위해
#define volatile
로 volatile 명령을 무효화시키는 경우가 있죠. 이게 로컬로 정의되어 있으면 문제가 없는데, 헤더에 정의되어 있으면 내가 만든 소스(ANSI 표준을 따르는)에까지 영향을 끼치게 됩니다. 이때 __volatile__을 쓰면 문제없이 쓸 수 있습니다.gcc를 쓰는한 그냥 asm과 volatile로 써도 되겠군요..
gcc를 쓰는한 그냥 asm과 volatile로 써도 되겠군요..
vim에서 색깔로 이쁘게 보여줘서요..:)
답변 감사합니다.
댓글 달기