2013-10-29 3 views
1

내가 프로젝트에 대한 C++를 사용은 아래와 같이 ira.h 교류 헤더 파일이 포함구문 오류 : __asm__ ("some_code"::: "CC")

#ifdef __cplusplus 
    extern "C" { 
#endif 

extern inline void disable_irqs() { 
    __asm__ __volatile__("\torc #0x80,ccr\n":::"cc"); 
} 

extern inline void enable_irqs() { 
    __asm__ __volatile__("\tandC#0x7f,ccr\n":::"cc"); 
} 

#ifdef __cplusplus 
} 
#endif 

내가 컴파일 할 때, 내가 가진 다음과 같은 오류 :

/usr/local/bin/h8300-hitachi-hms-g++ -DCXX -fno-rtti -fno-exceptions -O2 -fno-builtin -fomit-frame-pointer -Wall -I/brickos/include -I/brickos/include/lnp -I. -I/brickos/boot -c rcx1.C -o rcx1.o 
In file included from PowerFunctionsController.H:32, 
      from rcx1.H:27, 
      from rcx1.C:21: 
/brickos/include/lnp/sys/irq.h: In function `void disable_irqs(...)': 
/brickos/include/lnp/sys/irq.h:99: parse error before `::' 
/brickos/include/lnp/sys/irq.h: In function `void enable_irqs(...)': 
/brickos/include/lnp/sys/irq.h:104: parse error before `::' 
make: *** [rcx1.o] Error 1 

어떻게해야합니까? 범위 연산자 :: 콜론 : :

+1

인라인 어셈블리에 형식 문자를 추가 할 이유가 있습니까? 일단 컴파일되면 '\ t'와'\ n' 문자는 관련성이 없습니다. –

+0

brickOS 개발자가 제공하는 것입니다 ... – mikezang

+0

"cc"가 플랫폼에서 무엇을하는지 모르겠지만 아무 것도하지 않으면'::: '을 제거하면됩니다. 어쨌든 선택적 매개 변수를 사용하고 있지 않으므로 "cc"부분을 사용하십시오. –

답변

7

GCC는 문자 :::같은 연산자 시퀀스 파싱한다. 키워드와 연산자를 구문 분석 할 때 가장 긴 시퀀스와 일치하기 때문입니다. 각 콜론 사이에 공백을 추가 할 필요가 없다면 : : :