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
'programing' 카테고리의 다른 글
Vuetify v-select onchange 이벤트가 현재 대신 이전에 선택한 값을 반환함 (0) | 2022.07.15 |
---|---|
여러 컴포넌트의 값 전송 (0) | 2022.07.15 |
Vuejs : 데이터 속성 변경 시 컴포넌트가 재렌더되지 않음 (0) | 2022.07.15 |
vue.js - 객체 배열을 여러 개의 div 열로 분할하는 방법 (0) | 2022.07.15 |
어레이에 Java에서 특정 값이 포함되어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2022.07.15 |