programing

C 프로그래밍에서 트리플 마이너스 부호가 나올 수 있나요?그것은 무엇을 뜻하나요?

copyandpastes 2022. 7. 2. 21:34
반응형

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

반응형