문제

이제 프로젝트를 컴파일 할 의사가 있습니다 -std=c99 그리고 나는 지금 이해하지 못하는 오류에 직면하고 있습니다. 이 라인 :

my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; });

C99에서만 다음 오류를 제공합니다.

warning: ISO C forbids nested functions
error: syntax error before ‘asm’
error: ‘arg0’ undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
warning: ISO C forbids braced-groups within expressions

모든 단서는 이것이 의미하는 바를 이해하는 데 도움이됩니다. 나는이 줄을 쓰지 않았고 그 목적이 무엇인지 이해할 수 없다.

도움이 되었습니까?

해결책

라인

my_type* td = ({ register my_type* arg0 asm("eax"); arg0; });

값을 얻어야합니다 eax 포인터로 해석 된 등록 td 변하기 쉬운. 그러나 많은 GNU 확장, 특히 명세서 표현 및이 사용을 사용합니다. asm (명시 적 레지스터 할당). -std = gnu99 (또는 그것이 무엇이든)로 전환하는 것이 좋습니다. 그렇지 않으면 이중 밑줄로 플레이하고 싶을 수도 있습니다 (예 : asm -> __asm) 아니면 그 __extension__ 키워드이지만 C99 모드에서 도움이 될지 모르겠습니다.

편집 : 방금 시도했고 간단히 바뀌 었습니다 asm 에게 __asm 공장.

다른 팁

asm() 함께 작동하지 않는 것 같습니다 -std=c99. 표준은 실제로 컴파일러가 asm() 키워드이지만 필수는 아닙니다.

나는 당신이 사용하는 것이 좋습니다 -pedantic 대신에.

ASM이없는 문제는 Arg0처럼 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top