C에서 상수를 문장으로 사용할 수 있는 이유는 무엇입니까?
아래 프로그램에 오류가 없는 이유는 무엇입니까?
int main (void) {
"ANGUS";
1;
3.14;
return 0;
}
이러한 각 문장은 값을 평가하는 표현이며, 그런 다음 폐기됩니다.반환 값을 사용하지 않고 int, char 또는 float를 반환하는 함수를 호출한 경우와 비교합니다.그것도 가치를 평가하는 표현입니다.
호출자가 관심을 가질 수도 있고 가지지 않을 수도 있는 값을 반환하는 기능을 갖는 것은 드문 일이 아닙니다. 예를 들어,printf("%d", 9001)
인쇄된 문자 수를 반환합니다.발신자는 반환된 번호를 사용할 수도 있고 그냥 무시할 수도 있습니다.
만약 당신이 반환 값을 무시할 때마다 컴파일러가 불평한다면, 당신은 매우 시끄러운 빌드 로그를 갖게 될 것입니다.그러나 일부 컴파일러는 (충분한 경고 플래그가 활성화된 경우) 리터럴 및 변수의 무의미한 부작용 없는 사용을 진단합니다.
C의 문장이 그냥 버려지는 값인 것은 완벽하게 유효합니다.대부분의 사람들은 다음과 같은 것들을 코드화할 때 바로 이런 일이 발생한다는 것을 깨닫지 못합니다.
x++;
printf ("Hello, world\n");
전자는 사실 변수를 '되돌린' 후에 변수가 증가하는 부작용이 생기는 표현입니다.
후자의 함수 호출은 실제로 값(인쇄된 문자 수)을 반환하며, 이 값 또한 폐기됩니다.
어떤 관점에서 보면, 그것은 다음과 같은 진술과 다를 바가 없습니다.
42;
3 * 12;
부작용이 없다는 사실 외에 유용한 정보를 제공합니다.
사실은, 심지어x = 1
는 결과가 폐기되는 식입니다.이것이 만드는 것입니다.x = y = z = 0
이것이 효과적이기 때문에 가능합니다.
(x = (y = (z = 1)));
이 모든 내용은 C99 섹션에 자세히 나와 있습니다.6.8.3 Expression and null statements
부분적으로는 다음과 같습니다.
식문의 표현은 과제, 함수 호출 등 부작용에 대한 무효 표현으로 평가됩니다.
진술이 단지 표현으로만 구성되는 것은 완벽하게 유효합니다.당신의 예에서 그렇게 함으로써 성취되는 것은 아무것도 없지만, 그것은 완벽하게 동일하게 유효합니다.
c는 유효한 문장이지만 java를 사용하면 컴파일 시간 오류가 발생하기 때문입니다.
왜 그래야 하죠?메인에서 처음 세 줄은 아무것도 하지 않고 0을 반환합니다. 이는 올바른 표현입니다.
gcc를 사용하여 프로그램을 컴파일하는 경우 모든 경고(-Wall 파라미터 포함)를 활성화합니다.이것은 인쇄될 것입니다.warning: statement with no effect [-Wunused-value]
그것은 유효하기 때문입니다.문자열 또는 숫자는 유효한 표현식이고 세미콜론 다음에 오는 표현식은 문장(비공식적으로는 명령어라고도 함)입니다.
이는 C++에서도 사용할 수 있으며 Visual Studio에서는 열거형에 대해 "모든 참조 찾기"를 원하는 해커식 사용이 있으며, 세미콜론으로 끝나는 줄에 열거형을 직접 입력하고 상황에 맞는 메뉴를 사용하여 참조를 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/7172860/why-can-i-use-constants-as-statements-in-c
'code' 카테고리의 다른 글
#토큰 없이 식별자 정의 (0) | 2023.10.30 |
---|---|
팬더 하이퍼링크로 읽기_excel (0) | 2023.10.30 |
_일부 필드에만 Enter 키를 사용하여 양식 제출을 사용하지 않도록 설정합니다. (0) | 2023.10.30 |
사용자 지정 속성에 대한 클라이언트 측 유효성 검사 수행 (0) | 2023.10.30 |
Node.js에서 cURL에 해당합니까? (0) | 2023.10.30 |