반응형
C 프로그래밍에서 트리플 마이너스 기호를 가질 수 있습니까? 무슨 뜻이에요?
중복 가능성 :
C에서 a +++++ b가 작동하지 않는 이유는 무엇입니까?
나는 David Simon의 "An Embedded Software Primer"의 113 페이지에서 이것을 얻었습니다.
아래에서이 진술을 보았습니다.
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
이 줄에 정말 세 개의 마이너스 기호가있을 수 있습니까? 트리플 마이너스 기호는 무엇을 의미합니까?
나는 그것이 C 프로그래밍 진술이라고 믿는다.
다음과 동일합니다.
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
이것은 최대 뭉크 원칙 에 따른 것입니다.
정답은 (Rob이 말했듯이) 다음과 같습니다.
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
그게 아닌 이유는
iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld);
다음 토큰에 대해 둘 이상의 가능성이있는 경우 가장 많은 문자를 가진 토큰을 사용 (물기)하는 최대 뭉크 전략 으로 알려진 규칙 입니다. 이 경우 가능성은 -
및 --
, --
분명히 더 깁니다.
에 따르면, 임시 C ++ 11 (PDF) 2.5 전처리 토큰 절 3 초안 C11 (PDF) 6.4 어휘 요소, 제 4 항, 컴파일러는 다음의 토큰 등의 문자의 가장 긴 시퀀스를 파싱한다.
이 방법은 ---
두 가지 토큰으로 파싱 될 --
하고 -
제공하는
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;
}
gcc에서 3을 제공합니다.
물론입니다. 이 진술
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
다음과 같다
iHoursTemp = iHoursTemp + iZoneNew -(--iZoneOld); //first decrement iZoneOld then perform rest of the arithmetic operation.
약간의 수수께끼이지만 글을 쓰는 재미 :-)
반응형
'developer tip' 카테고리의 다른 글
"# DIV / 0!"을 피하려면 어떻게해야합니까? (0) | 2020.12.27 |
---|---|
줄이 공백 문자로 시작될 때 줄 시작 부분까지 삭제 (0) | 2020.12.27 |
업스트림이 너무 큼-nginx + codeigniter (0) | 2020.12.27 |
IE11의 Flexbox : 이유없이 이미지가 늘어 났습니까? (0) | 2020.12.27 |
Python 메모리 내 zip 라이브러리 (0) | 2020.12.27 |