구두점
구두점 (Punctuation)
C 소스 코드를 이루는 문자 하나하나가 어떤 역할을 하는지 정리해 둔 페이지예요. {, [, #, ; 같은 부호들이 문법의 어느 부분에서 어떤 의미로 쓰이는지를 알면 코드를 읽을 때 훨씬 수월해져요. 각 기호의 자세한 설명은 링크된 페이지에 있어요.
출처: cppreference
본문
이것들은 C의 구두점 기호들이에요. 각 기호의 의미는 링크된 페이지에 자세히 나와 있어요.
{ }
- 구조체나 공용체 정의에서 struct-declaration-list를 구분해요.
- 열거형 정의에서 enumerator 목록을 구분해요.
- 복합문(compound statement)을 구분해요. 복합문은 함수 정의의 일부일 수 있어요.
- 초기화에서 초기화자들을 구분해요.
[ ]
- 첨자 연산자예요.
- 선언이나 type-id의 배열 선언자의 일부예요.
- 초기화에서 배열 원소에 대한 지정자(designator)를 도입해요. (since C99)
- 속성 지정자에서 속성들을 구분해요. (since C23)
#
- 전처리 지시문을 도입해요.
- 문자열화(stringification)를 위한 전처리 연산자예요.
##
- 토큰 결합(token pasting)을 위한 전처리 연산자예요.
( )
- 표현식에서 그룹화를 나타내요.
- 함수 호출 연산자예요.
sizeof,_Alignof(since C11),typeof·typeof_unqual(since C23) 표현식에서 피연산자를 구분해요.- 명시적 캐스트에서 type-id를 구분해요.
- 복합 리터럴에서 type-id를 구분해요. (since C99)
- 선언이나 type-id에서 그룹화를 나타내요.
- 함수 선언자(선언이나 type-id에서)에서 매개변수 목록을 구분해요.
if,switch,while,do-while,for문에서 제어 절을 구분해요.- 함수형 매크로 정의에서 매크로 매개변수를 구분해요.
- 함수형 매크로 호출에서 매크로 인자를 구분하거나, 콤마가 인자 구분자로 해석되는 것을 막아요.
defined,__has_include,__has_embed, 또는__has_c_attribute(since C23) 전처리 연산자의 일부예요.- 제네릭 선택 표현식의 일부예요. (since C11)
_Atomic타입 지정자에서 type-id를 구분해요. (since C11)- 정적 단언(static assertion) 선언에서 피연산자들을 구분해요. (since C11)
_Alignas지정자에서 피연산자를 구분해요. (since C11)- 속성에서 속성 인자들을 구분해요. (since C23)
- 비트-정밀 정수 타입 이름(
_BitInt(N))에서 크기를 구분해요. (since C23) - 가변 인자 매크로 정의에서
__VA_OPT__치환의 일부예요. (since C23) #embed지시문과__has_embed전처리 표현식에 쓰이는 전처리 매개변수에서 매개변수 절을 구분해요. (since C23)
;
다음의 끝을 나타내요.
-
문(statement) (for 문의 init-statement 포함)
-
선언 또는 struct-declaration-list
-
for 문의 두 번째와 세 번째 절을 분리해요.
:
- 조건 연산자의 일부예요.
- 레이블 선언의 일부예요.
- 비트 필드 멤버 선언에서 너비를 도입해요.
- 열거형의 기본 타입(underlying type)을 지정하는 enum base를 도입해요. (since C23)
- 제네릭 연관(association)에서 type-id 또는
default와 선택된 표현식을 구분해요. (since C11)
...
- 함수 선언자의 매개변수 목록에서 가변 인자 함수(variadic function)임을 나타내요.
- 매크로 정의에서 가변 인자 매크로임을 나타내요. (since C99)
?
- 조건 연산자의 일부예요.
::
- 속성에서 속성 범위를 나타내요. (since C23)
- 전처리 접두 매개변수(
#embed와__has_embed가 사용)에서 범위를 나타내요. (since C23)
.
->
- 멤버 접근 연산자예요.
~
- 단항 보수 연산자(비트 not 연산자라고도 해요)예요.
!
- 논리 not 연산자예요.
+
- 단항 더하기 연산자예요.
- 이항 더하기 연산자예요.
-
- 단항 빼기 연산자예요.
- 이항 빼기 연산자예요.
*
- 간접(역참조) 연산자예요.
- 곱셈 연산자예요.
- 선언자 또는 type-id에서 포인터 연산자예요.
- 함수 선언에서 가변 길이 배열 선언자의 길이를 위한 자리 표시자예요. (since C99)
/
- 나눗셈 연산자예요.
%
- 모듈로 연산자예요.
^
- 비트 xor 연산자예요.
&
- 주소 연산자예요.
- 비트 and 연산자예요.
|
- 비트 or 연산자예요.
=
- 단순 할당 연산자예요.
- 초기화에서 객체와 초기화자 목록을 구분해요.
- 열거형 정의에서 열거 상수의 값을 도입해요.
+=
- 복합 할당 연산자예요.
-=
- 복합 할당 연산자예요.
*=
- 복합 할당 연산자예요.
/=
- 복합 할당 연산자예요.
%=
- 복합 할당 연산자예요.
^=
- 복합 할당 연산자예요.
&=
- 복합 할당 연산자예요.
|=
- 복합 할당 연산자예요.
==
- 동등(equality) 연산자예요.
!=
- 부등(inequality) 연산자예요.
<
- 보다 작음(less-than) 연산자예요.
- 다음에서 헤더 이름을 도입해요.
#include지시문__has_include전처리 표현식 (since C23)#embed지시문 (since C23)__has_embed전처리 표현식 (since C23)#pragma지시문 내부의 구현-정의 위치
>
- 보다 큼(greater-than) 연산자예요.
- 다음에서 헤더 이름의 끝을 나타내요.
#include지시문__has_include전처리 표현식 (since C23)#embed지시문 (since C23)__has_embed전처리 표현식 (since C23)#pragma지시문 내부의 구현-정의 위치
<=
- 보다 작거나 같음(less-than-or-equal-to) 연산자예요.
>=
- 보다 크거나 같음(greater-than-or-equal-to) 연산자예요.
&&
- 논리 and 연산자예요.
||
- 논리 or 연산자예요.
<<
- 비트 시프트 연산자예요.
>>
- 비트 시프트 연산자예요.
<<=
- 복합 할당 연산자예요.
>>=
- 복합 할당 연산자예요.
++
- 증가 연산자예요.
--
- 감소 연산자예요.
,
- 콤마 연산자예요.
- 다음에서 목록 구분자예요.
- 선언의 선언자 목록
- 초기화의 초기화자 목록 (복합 리터럴 포함, since C99)
- 함수 호출 표현식의 인자 목록
- enum 선언의 enumerator 목록
- 함수 매개변수 목록
- 함수형 매크로 정의의 매크로 매개변수 목록
- 함수형 매크로 호출의 매크로 인자 목록 (안쪽 괄호 사이에 있지 않은 경우)
- 제네릭 선택 표현식의 제네릭 연관 목록 (since C11)
- 속성 목록 (since C23)
- 정적 단언 선언에서 인자들을 분리해요. (since C11)
- 제네릭 선택 표현식에서 제어 표현식과 제네릭 연관 목록을 분리해요. (since C11)
더 알아보기
- 대체 표현 (Alternative representations, C95) — 일부 연산자의 대체 표기
- C++ 문서: 구두점