2011-11-23 2 views
2

"사용법 #include 지시어의 끝에 추가 토큰"나는 이전 질문에서 시도 솔루션을 테스트입니다 : Use typedef within struct for naming and indexing text commands해결 빌드 경고 -

그러나, 나는 누구에게도 내 컴파일러 경고를 계속하고 싶습니다. 이러한 목적으로 정적 코드 분석 도구를 사용하고 특정 도구 (예 : LINT)의 경우 주석 내에서 마크 업을 사용하여 특정 규칙과 경고를 수동으로 제외 할 수 있습니다. 최초/최고 응답의 경우

는, 그 해결책을 시도했지만 이렇게 같이 할 수있는 최종 구조 수정 : 검색하는 동안 그 I를하는 경우

struct command commands[] = 
{ 
#include "commands.inc", 
{NULL, NULL} 
}; 

이것은 그래서 난 알 수를, 이 배열 구조체의 가장 큰 주소 지정 가능 멤버에 도달하고 범위를 벗어나는 조건을 벗어나지 않습니다. 문제는 "경고 : #include 지시문 끝에 여분의 토큰이 있습니다"라는 컴파일러 경고가 있다는 것입니다. 이 경고를 비활성화 할 수있는 방법이 있습니까? 나는이 해결책이 마음에 든다. 그리고 그것은 나의 필요에 잘 맞는다. 결국



, 정말처럼 내 .inc 파일을 업데이트 :

CMD(list), 
CMD(quit), 
CMD(start), 

대신 내가 후미 쉼표를 제거 할 수 있었다

CMD(list), 
CMD(quit), 
CMD(start) 

의 내 매크로 정의와 정적 초기화 코드 모두.

답변

12

#include 지시어 끝에 쉼표를 제거해야합니다. 거기 있으면 안된다.

+0

나는 다음 요소를 null로 구성하여 선언 할 수 있습니다. – DevNull

+0

@GirLovesTacos : 다음 쉼표를 다음 줄로 이동하십시오. '# '로 시작하는 줄은 전처리 기용이며 컴파일러에서는 볼 수 없습니다. – wallyk

+0

정말 쉼표가 필요하지 않습니다. - #define COMMAND (NAME) {#NAME, CMD_ ## NAME}, ... # –

1

마침내 쉼표가 뒤죽박죽입니다. 시도해보십시오 :

struct command commands[] = 
{ 
#include "commands.inc" 
, {NULL, NULL} 
}; 
+0

불행히도 # , 컴파일러 오류가 발생하고 빌드가 중단됩니다. – DevNull

+0

Ah 매크로에 이미 쉼표가 내장되어 있다는 것을 알지 못했습니다. 그러면 @Tony The Lion의 주석이 정확합니다. 매크로는 NULL로 구성되는 다음 요소를 선언하는 데 필요한 쉼표를 제공합니다. – JoeFish

관련 문제