2012-03-26 2 views
0

os161 프로젝트에서 작업하고 있습니다. src/kern/include에 array.h가 포함되어있는 파일을 생성합니다. 컴파일 할 때 다음과 같은 오류가 발생했습니다 : ./../include/array.h:85 : 오류 : '=', ',', ';', 'asm'또는 '속성' '부호' ../../include/array.h:91 오류 : 예상 '=', ',', ';', 'ASM'또는 '속성'무효 '이전오류가 발생하기 전에 OS161에서 '=', ',', ';', 'asm'또는 '__attribute__'이 필요합니다.

코드는 같다 :

#ifndef ARRAYINLINE 
#define ARRAYINLINE INLINE 
#endif 

ARRAYINLINE unsigned --------------line 85 error 
array_num(const struct array *a) 
{ 
    return a->num; 
} 

ARRAYINLINE void *  --------------line 91 error 
array_get(const struct array *a, unsigned index) 
{ 
    ARRAYASSERT(index < a->num); 
    return a->v[index]; 
} 

하고 이런 종류의 오류는 모든 라인에서 일어난 INLINE 또는 ARRAYINLINE 같은 것을 가지고있다. 이 array.h 파일이 제공되며 변경하지 않았습니다. 정말로 이유를 알 수 없습니다.

+0

오류는 컴파일러가 '인라인'이 무엇인지 이해할 수 없다고 말합니다. 어쩌면'#define ARRAYINLINE INLINE'은'define ARRAYINLINE inline'을 사용하여 컴파일러가 함수를 '인라인'하도록 요구할 수 있습니까? 그렇지 않다면, 컴파일하는 동안'INLINE'이 정의되어 있습니까? –

+2

전처리 기 후 프로그램 텍스트를 가져 와서 표시하십시오. 예 : gcc의 경우 "-E"옵션입니다. 가장 가능성이 큰 변형은 인라인 또는 이상한 정의가 아닙니다. – Netch

+0

const 구조체 배열을 추가 할 수 있습니까? 그리고 조금 더 많은 코드가 있습니다. 컴파일 명령은 무엇입니까? – Patapoom

답변

1

저는 os161에서도 작업하고 있습니다. INLINE이 정의되지 않은 경우 대신 #define ARRAYINLINE inline을 사용해보세요.

[편집]

내 os161 버전을 확인했습니다. 나는 #define ARRAYINLINE INLINE

#define INLINE extern inline 
전에이 줄을 발견

당신의 array.h도 (내 경우에는 115)이 라인을 포함한다면 확인하십시오

[/ 편집] 나뿐만 아니라 OS161에서 일하고 있어요

-1

이 오류는 함수 외부에 임의의 문자가있는 경우에 발생할 수 있습니다. 예 :

#include <...> 
... 
e //<-this random character that could have been mistyped. 

sys_fork(...){ 
... 
}