C 프로그래밍에서 트리플 마이너스 부호가 나올 수 있나요?그것은 무엇을 뜻하나요?
중복 가능성:
왜 C에서는 a++++b가 작동하지 않는 거죠?
데이비드 사이먼의 '임베디드 소프트웨어 입문서' 113페이지에서 얻은 것입니다.
아래 문구를 보았습니다.
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
이 줄에 정말 마이너스 기호 세 개가 있어요?트리플 마이너스 부호는 무슨 뜻입니까?
나는 그것이 C 프로그래밍 스테이트먼트라고 믿는다.
이는 다음과 같습니다.
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
이것은 Maximum-Munch 원칙에 준거하고 있다.
정답은 (Rob이 말한 대로) 다음과 같습니다.
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
그 이유는 그렇지 않다.
iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld);
maximum munch strategy로 알려진 규칙입니다.다음 토큰에 여러 가지 가능성이 있는 경우 가장 많은 문자를 가진 토큰을 사용합니다(물림).이 경우의 가능성은 다음과 같습니다.-
그리고.--
,--
확실히 더 길어요.
초안 C++11(PDF) 2.5 전처리 토큰 3절 및 초안 C11(PDF) 6.4 어휘 요소 4절에 따르면 컴파일러는 다음 토큰으로 가능한 가장 긴 일련의 문자를 구문 분석합니다.
즉,---
2개의 토큰으로 해석됩니다.--
그리고.-
즉,
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
또한 우선 순위 또는 구문 분석 규칙이 확실하지 않은 경우 괄호를 사용하여 코드를 명확히 합니다.
등가
iHoursTemp = iHoursTemp + (iZoneNew--) -iZoneOld;
#include <stdio.h>
int main()
{
int iHoursTemp = 2, iZoneOld = 3, iZoneNew = 4;
//2+4 - 2 = 4
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
//2+(4--) -3 = 3
printf("\n :%d \n", iHoursTemp);
return 0;
}
3인치의 gcc를 주세요.
물론이죠.이 스테이트먼트
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
와 동등하다
iHoursTemp = iHoursTemp + iZoneNew -(--iZoneOld); //first decrement iZoneOld then perform rest of the arithmetic operation.
약간의 브레인 티저이지만, 쓰는 것은 즐겁다:-)
언급URL : https://stackoverflow.com/questions/13874179/can-you-have-a-triple-minus-signs-in-c-programming-what-does-it-mean
'programing' 카테고리의 다른 글
set/getsockopt SO_SNDBUF 사이즈가 2배가 되는 것을 이해한다. (0) | 2022.07.02 |
---|---|
변경된 파일만 다시 컴파일하도록 Makefile을 만들려면 어떻게 해야 합니까? (0) | 2022.07.02 |
TypeError: Vue2에 정의되지 않은 속성 '구성 요소'를 읽을 수 없습니다. (0) | 2022.07.02 |
vue 3에서 vue-chartjs 사용 : createElement는 함수가 아닙니다. (0) | 2022.07.02 |
Java 문자열을 모든 대문자(밑줄로 구분된 단어)에서 CamelCase(단어 구분 기호 없음)로 변환하는 가장 간단한 방법은 무엇입니까? (0) | 2022.07.02 |