C의 BNF 문법을 살펴볼 때 선언의 생산 규칙이 다음과 같이 이상하다고 생각했습니다 ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C % 20in % 20Backus-Naur % 20form.htm ) :
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
?에 대해 *
수량자를 사용하는 이유 (0 번 이상 발생) init-declarator
? 이는 의미 상 유효하지 않지만 구문 과 같은 int;
또는 void;
구문이 유효한 구문을 허용합니다 . 생산 규칙 +
대신 수량 자 (한 번 이상 발생)를 사용할 수 없었 *
습니까?
컴파일러가 무엇을 출력하는지 확인하기 위해 간단한 프로그램을 컴파일하려고했는데 경고가 발생했습니다.
입력:
int main(void) {
int;
}
산출:
test.c: In function ‘main’:
test.c:2:5: warning: useless type name in empty declaration
int;
^~~
int
의 반환 유형으로 main
사용 ()
하고 (void)
대신 매개 변수 유형 목록으로 사용하십시오.