오류: int 이전의 식이 필요합니다.
다음 코드를 시도해보니 오류가 발생합니다.
if(a==1)
int b =10;
그러나 다음은 구문론적으로 정확합니다.
if(a==1)
{
int b = 10;
}
왜 이러한가?
이것은 사실 상당히 흥미로운 질문입니다.처음 보는 것처럼 간단하지 않습니다.참고로 N1570에 정의된 최신 C11 언어 문법을 바탕으로 하겠습니다.
이 질문의 직관에 어긋나는 부분은 다음과 같습니다. 이것이 맞다면 C:
if (a == 1) {
int b = 10;
}
그렇다면 왜 이것 또한 C가 맞지 않는 것일까요?
if (a == 1)
int b = 10;
내 말은, 한 줄 조건이if
교정기가 있든 없든 진술은 괜찮겠죠?
답은 문법에 있습니다.if
C 표준에 의해 정의된 바와 같이 진술.제가 아래에 인용한 문법의 관련 부분입니다.간단히 말해:int b = 10
line은 선언이지, 진술이 아닙니다, 그리고 문법입니다.if
진술서는 시험 중이라는 조건 뒤에 진술서가 필요합니다.하지만 선언문을 괄호 안에 넣으면 진술문이 되고 모든 것이 잘 됩니다.
그리고 질문에 완벽하게 대답하기 위해서 말이죠. 이건 범위와는 상관없는 일이 없어요.b
해당 범위 안에 존재하는 변수는 해당 범위 밖에서 액세스할 수 없지만 프로그램은 구문적으로 여전히 정확합니다.엄밀하게 말하면, 컴파일러가 오류를 던져서는 안 됩니다.물론, 당신은 당신과 함께 건설해야 합니다.-Wall -Werror
어쨌든 ;-)
(6.7) 선언:선언-지정자 init-admicator-listopt;정적_중복사 (6.7) init-acculator-list:초기계산기init-admator-list, init-admator (6.7) init-acculator:선언자선언자 = 이니셜라이저 (6.8) 문:표식이 있는복합적인표현문선택문반복 진술깡충깡충 뛰다p-statement (6.8.2) 복합 문:{블록-항목-목록opt } (6.8.4) 선택문:if (식) 문장if (식) other statementswitch (식) 문
{ }
-->
하므로 를 합니다 합니다.if(a==1) { int b = 10; }
{} - 이 범위에 대해 int b를 정의하고 있다고 합니다.
if(a==1)
int b =10;
범위가 없습니다.그리고 당신은 사용할 수 없을 것입니다.b
아무 곳이나.
C89에서는 블록의 맨 위에서만 변수를 정의할 수 있습니다.
if (a == 1)
int b = 10; // it's just a statement, syntacitially error
if (a == 1)
{ // refer to the beginning of a local block
int b = 10; // at the top of the local block, syntacitially correct
} // refer to the end of a local block
if (a == 1)
{
func();
int b = 10; // not at the top of the local block, syntacitially error, I guess
}
언급URL : https://stackoverflow.com/questions/22419790/c-error-expected-expression-before-int
'programing' 카테고리의 다른 글
안드로이드:배열에서 프로그래밍 방식으로 스피너 생성 (0) | 2023.09.09 |
---|---|
정적 @BeforeClass에서 필드를 자동 배선하는 방법은 무엇입니까? (0) | 2023.09.09 |
파일이 존재하는지 테스트하는 빠른 방법은 무엇입니까? (0) | 2023.09.09 |
MariaDB 10.2의 utf_8_span_ci colation이 제대로 작동합니까? (0) | 2023.09.04 |
이미지를 사용하는 것보다 서클 디브를 만드는 더 쉬운 방법은? (0) | 2023.09.04 |