2016-06-23 1 views
1

내부에 나는 * 아래 (const를 문자)로 시작하는 줄에 오류예상 지정자 한정자 목록 오류가 구조체

error: expected specifier-qualifier-list before ‘(’ token

을 얻고 나는이 오류가 무엇을 의미하는지 이해가 안 돼요. 무슨 뜻이에요? (이 주제에 대한 또 다른 질문이 있습니다, 그러나 다른 문제의 한 가지 대답은 오류가 무엇을 의미하는지 설명하지 않습니다.)

#include "stddef.h"  /* size_t */ 

typedef struct { 
    size_t size; 
    (const char)* strings[]; 
} STRLIST; 

static STRLIST listMediaType = { 
    7, 
    { 
     "Book", 
     "Map", 
     "Booklet", 
     "Pamphlet", 
     "Magazine", 
     "Report", 
     "Journal" 
    } 
}; 
+0

@ user3386109 예, 그것은했지만 어떻게 오류 메시지를 이해할 수 있습니다. 다른 말로하면 왜이 특정한 오류 메시지가 여기에서 발생합니까? –

답변

0

이 특정 오류 메시지 유형 + 수정의 주위에 여분의 괄호 때문이다 IE 여분의 parens 주위에 const char.

여분의 괄호를 제거하면 모든 오류가 사라집니다.

listMediaType이 정의되었지만 사용되지는 않는다는 경고가 계속 표시됩니다.

1

괄호를 제거하여 문제를 해결할 수 있습니다. 이것은 일종의입니다. C 사양은 초기화 프로그램 목록이있는 유연한 배열 구성원의 초기화를 금지하기 때문에이 문제를 수정했습니다. 그러나, clang (그리고 나는 gcc라고 가정한다)은 그것을 확장으로 허용한다. -Weverything으로 컴파일하면 확장 프로그램을 사용하고 있다는 경고가 표시됩니다.

괄호가 허용되지 않는 이유는 다음과 같습니다. "6.7 신고" (38 페이지 길이) 섹션을 읽을 필요가 있음을 진정으로 이해하는 것입니다. 짧은 대답은 컴파일러가 선언을 기다리고 있다는 것입니다. 선언은 다양한 지정자와 한정어로 시작하며 그 중 어느 것도 괄호로 시작하지 않습니다.

그래서 (보기의 컴파일러의 관점에서) 오류 메시지의 적절한 해석은 다음과 같습니다

"I was expecting the declaration of a structure member, which should start with a specifier or qualifier, but instead you gave me a parentheses. Don't do that."

관련 문제