programing

C에서 단항 더하기(+) 연산자의 목적은 무엇입니까?

kingscode 2022. 7. 15. 22:09
반응형

C에서 단항 더하기(+) 연산자의 목적은 무엇입니까?

C에서는 다음과 같이 적어야 합니다.

int foo = +4;

플러스단항 플러스, 단항 플러스, 단항 플러스, 단항 플러스(플러스))입니다.+의 in ) ) 。+4수술 금지입니다.

한 두 했다.+ do is ( do)

  • integer promotion
  • turning lvalue into rvalue

정수 승격 예:

#include <stdio.h>

int main(void) {

    char ch;
    short sh;
    int i;
    long l;

    printf("%d %d %d %d\n",sizeof(ch),sizeof(sh),sizeof(i),sizeof(l));
    printf("%d %d %d %d\n",sizeof(+ch),sizeof(+sh),sizeof(+i),sizeof(+l));
    return 0;
}

표준 출력(64비트 플랫폼):

1 2 4 8
4 4 4 8

lvalue를 rvalue로 변환하는 예:

int i=0,j;

j=(+i)++; // error lvalue required

6.3.3의 C90 표준에 따라:

단항 + 연산자의 결과는 피연산자의 값입니다.피연산자에 대해 통합 프로모션이 수행됩니다.결과에는 승격 유형이 있습니다.

그리고.

단항 + 또는 - 연산자의 피연산자는 산술 유형을 가져야 한다.

표현식에 다음과 같은 산술 유형이 있다는 일종의 주장으로 사용할 수 있습니다.

#define CHECK_ARITHMETIC(x) (+(x))

시간 합니다.x인터로로평평평평

그것은 내가 생각할 수 있는 유일한 실용에 관한 것이다.

단항 플러스 연산자를 매크로에서 쉽게 사용할 수 있습니다.예를 들어 다음과 같은 일을 하고 싶다고 가정해 봅시다.

#if FOO > 0

ifFOO정의되어 있지 않습니다.으으으 언 0 으 、 으으 0 으 、 으으 으으 으으 。, 만약 ★★★★★★★★★★★★★★★★.FOO에는 빈 정의가 정의되어 있습니다.위의 지시어는 에러를 발생시킵니다.대신 다음을 사용할 수 있습니다.

#if FOO+0 > 0

이제으로 정확합니다.FOO정의되지 않았거나 공백으로 정의되었거나 정수 값으로 정의되었습니다.

물론 이것이 원하는 의미론을 산출할 수 있을지는 완전히 별개의 문제이지만, 일부 유용한 경우에는 그렇게 될 것이다.

편집: 이 기능을 사용하여 다음과 같은 경우를 구분할 수도 있습니다.FOO다음과 같이 0으로 정의되는 경우와 공백으로 정의되는 경우가 있습니다.

#if 2*FOO+1 == 1
/* FOO is 0 */
#else
/* FOO is blank */
#endif

C에서 단항 '+' 연산자의 목적은 무엇입니까?

국제 표준 - 프로그래밍 언어의 이론적 근거에서 단항 마이너스 대칭을 위해 단항 플러스가 C에 추가되었습니다.: C:

유니리 플러스는 단항 마이너스와의 대칭성을 위해 여러 구현에서 채택되었다.

no-op이 아니라 오퍼랜드에서 정수 프로모션을 수행합니다."Unary + 연산자는 변환을 합니까?"라는 제 답변에서 인용한 내용:

초안 'C99'6.5.3.3 단항 연산자는 다음과 같이 말합니다.

단항 + 연산자의 결과는 해당(승격된) 피연산자의 값입니다.정수 프로모션은 오퍼랜드에서 수행되며 결과에는 승격 유형이 있습니다.

주석 C++ 레퍼런스 매뉴얼(ARM)은 단항 플러스에 대한 다음과 같은 설명을 제공합니다.

유니리 플러스는 역사적 사고이며 일반적으로 쓸모가 없다.

엄밀히 말하면 노옵션은 아니다

단항+연산자는 정수 프로모션을 적용합니다.피연산자가 식에 사용된다면 이런 일이 일어날 것이기 때문에, 사람들은 단항이 있다고 상상한다.+단순히 단항과의 대칭을 위해 C에 있다.-.

프로모션이 너무 일반적으로 적용되기 때문에 실제로 이것을 보는 것은 어렵습니다.

내가 생각해낸 건 이거야

printf("%zd\n", sizeof( (char) 'x'));
printf("%zd\n", sizeof(+(char) 'x'));

(내 Mac에) 인쇄하는 것

1
4

어느 정도는.이것은 주로 완성도를 높이기 위해 존재하며, 이와 같은 구조를 좀 더 깔끔하게 보이게 하기 위해 사용됩니다.

int arr[] = {
    +4,
    -1,
    +1,
    -4,
};

'no-op'이란 조립지시를 말하는 건가요?
만약 그렇다면, 절대 안 돼요.

+4는 4에 불과합니다.컴파일러는 더 이상의 명령을 추가하지 않습니다.

언급URL : https://stackoverflow.com/questions/6637005/what-is-the-purpose-of-the-unary-plus-operator-in-c

반응형