Namespaces
Variants

Expressions

From cppreference.net

표현식은 연산을 지정하는 일련의 연산자 와 그 피연산자 로 구성됩니다.

표현식 평가는 결과를 생성할 수 있습니다(예: 2 + 2 의 평가는 4 라는 결과를 생성함), 부작용을 발생시킬 수 있습니다(예: printf ( "%d" , 4 ) 의 평가는 문자 '4' 를 표준 출력 스트림으로 전송함), 그리고 객체나 함수를 지정할 수 있습니다.

목차

일반

  • 값 범주 (lvalue, 비 lvalue 객체, 함수 지정자)는 표현식을 값에 따라 분류합니다
  • 평가 순서 인수와 하위 표현식의 평가 순서는 중간 결과가 얻어지는 순서를 지정합니다

연산자

일반 연산자
대입 증가
감소
산술 논리 비교 멤버
접근
기타

a = b
a + = b
a - = b
a * = b
a / = b
a % = b
a & = b
a | = b
a ^ = b
a <<= b
a >>= b

++ a
-- a
a ++
a --

+ a
- a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

! a
a && b
a || b

a == b
a ! = b
a < b
a > b
a <= b
a >= b

a [ b ]
* a
& a
a - > b
a. b

a ( ... )
a, b
( type ) a
a ? b : c
sizeof


_Alignof
(C11부터)
(C23 이전)

alignof
(C23부터)

변환

  • 암시적 변환 은 피연산자의 타입이 연산자의 기대와 일치하지 않을 때 발생합니다.
  • 캐스트 는 값을 한 타입에서 다른 타입으로 명시적으로 변환하는 데 사용될 수 있습니다.

기타

  • 상수 표현식 은 컴파일 타임에 평가될 수 있으며 컴파일 타임 컨텍스트에서 사용될 수 있습니다 ( 비 VLA (C99부터) 배열 크기, 정적 초기화자 등)
  • 제네릭 선택 은 인수의 타입에 따라 서로 다른 표현식을 실행할 수 있습니다
(C11부터)
(C99 이후)

기본 표현식

모든 연산자의 피연산자는 다른 표현식일 수도 있고 기본 표현식 일 수도 있습니다 (예를 들어 1 + 2 * 3 에서 operator+의 피연산자는 부분 표현식 2 * 3 과 기본 표현식 1 입니다).

기본 식(primary expressions)은 다음 중 하나입니다:

1) 상수와 리터럴 (예: 2 또는 "Hello, world" )
2) 적절히 선언된 식별자 (예: n 또는 printf )
(since C11)

괄호 안의 모든 표현식은 기본 표현식으로도 분류됩니다: 이는 괄호가 모든 연산자보다 높은 우선순위를 가지도록 보장합니다.

상수와 리터럴

C 프로그램의 소스 코드에는 특정 타입의 상수 값들을 리터럴(좌측값 표현식의 경우)과 상수(비좌측값 표현식의 경우)로 알려진 특수한 표현식을 사용하여 포함시킬 수 있습니다.

  • integer constants 는 정수 타입의 10진수, 8진수 또는 16진수입니다.
  • character constants 는 문자 타입으로 변환에 적합한 int 타입의 개별 문자이거나 char8_t , (since C23) char16_t , char32_t , 또는 (since C11) wchar_t 타입의 개별 문자입니다.
  • floating constants float , double , 또는 long double 타입의 값입니다.
(C23부터)
  • 문자열 리터럴 은 널 종료 문자열을 나타내는 char [ ] , char8_t [ ] (C23부터) , char16_t [ ] , char32_t [ ] , (C11부터) 또는 wchar_t [ ] 타입의 문자 시퀀스입니다
  • 복합 리터럴 은 구조체, 공용체, 또는 배열 타입의 값을 프로그램 코드에 직접 내장한 것입니다
(C99부터)

평가되지 않는 표현식

sizeof 연산자 의 피연산자는 평가되지 않는 표현식입니다 (VLA인 경우 제외) (C99부터) . 따라서 size_t n = sizeof ( printf ( "%d" , 4 ) ) ; 는 콘솔 출력을 수행하지 않습니다.

_Alignof (until C23) alignof (since C23) 연산자의 피연산자, 제네릭 선택 의 제어 표현식, 그리고 _Alignof (until C23) alignof (since C23) 의 피연산자인 VLA의 크기 표현식 역시 평가되지 않는 표현식입니다.

(since C11)

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.5 Expressions (p: TBD)
  • 6.6 Constant expressions (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.5 Expressions (p: 55-75)
  • 6.6 Constant expressions (p: 76-77)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.5 Expressions (p: 76-105)
  • 6.6 Constant expressions (p: 106-107)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.5 Expressions (p: 67-94)
  • 6.6 Constant expressions (p: 95-96)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.3 EXPRESSIONS
  • 3.4 CONSTANT EXPRESSIONS

참고 항목

C++ 문서 참조: Expressions