developer tip

C 프로그래밍에서 트리플 마이너스 기호를 가질 수 있습니까?

optionbox 2020. 12. 27. 10:39
반응형

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.

약간의 수수께끼이지만 글을 쓰는 재미 :-)

참조 URL : https://stackoverflow.com/questions/13874179/can-you-have-a-triple-minus-signs-in-c-programming-what-does-it-mean

반응형