Search
Duplicate

C 선언문 해석하기

간단소개
c언어 선언문을 해석하는 방법에 대해 정리해 보았습니다.
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Scrap
태그
c언어
잡지식
9 more properties

C 선언문 구성 요소

C언어의 선언문은 포인터, 직접 선언자, 생성자로 구성된다. (선언문은 정의문과는 구분되지만 이 글에서는 선언문을 정의문과 같은 의미로 해석한다. 정의문은 새 객체를 생성할때, 선언문은 만들어진 객체를 참조할 때 사용한다.)
포인터는 다음의 표현 방법으로 나타낸다.
* //char *ptr; *const //char *const ptr; *volatile //int *volatile ptr; *const volatile //int *const volatile ptr; *volatile const //int *volatile const ptr; //etc..
Plain Text
복사
식별자는 변수의 이름, 함수의 이름, 배열의 이름 등을 나타낸다.
식별자 // 변수 x 식별자[사이즈] // 크기 4의 배열 arr[4] 식별자(인자) // x,y를 인자로 받는 함수 add(x,y)
Plain Text
복사
식별자에는 어떤 자료를 나타내는 지에 대한 자료형도 있어야 한다.
int x // 정수형 변수 선언 char x // 문자형 변수 선언 float x // 실수형 변수 선언 //etc..
Plain Text
복사
데이터를 다루는 방식에 대한 것들이다.
static //정적 변수로 만듦 extern //외부 변수를 사용 register //레지스터 메모리를 사용
Plain Text
복사
타입 한정자라는 것들도 있다.
const // 수정이 불가한 읽기 전용 값으로 만듦 volatile // 컴파일러의 최적화 기능을 끔 restrict // 다른 변수나 포인터의 접근을 막음
Plain Text
복사
이 외에도 선언문에서는 = 을 이용해 초기화를 해줄 수 있고, 콤마(,)를 사용해 여러 변수를 한 줄에 선언해 줄 수도 있다. 선언문의 끝은 세미콜론(;)으로 마친다.

선언문 읽는 법

선언문 규칙

<font color="gray">1. 맨 왼쪽에 있는 식별자부터 읽는다. 2. 대괄호 \[   ] 가 있으면 배열임을 염두에 둔다. 3. 소괄호 (   )  안에 있는 것은 덩어리로 해석한다. 4. 식별자 왼쪽에 애스터리스크가 붙어 있으면 "~를 가리키는 포인터"로 해석한다. 단, 함수 반환값이 포인터일 경우 오른쪽에 붙어 있다. 5. 포인터일 경우 어떤 자료형을 가리키는지 살펴본다.       5-1. 단, 오른쪽에 함수를 표시하는 (   ) 가 있으면 "함수를 가리키는~"으로 해석한다.       5-2. 함수를 가리킨다면, 그 함수는 어떤 자료형을 반환하는지 살펴본다. 6. <font color="pink">const</font> 는 그 사이에 어떤 것이 있든   <font color="pink">\*</font>  와의 상대적 위치를 기준으로 생각한다.</font>
int *const ptr //상수 포인터, 다른 주소값 할당 불가능 int const *ptr //상수 참조값, 다른 주소값 할당은 되나 참조 값 변경 불가능 const int *ptr //*와 const의 상대적 위치만을 살펴보므로 상수 참조값
Plain Text
복사

선언문 예시

int *const *(*ptr)(int nbr);
Plain Text
복사
<font color="skyblue">ptr</font> <font color="skyblue">포인터</font> ptr <font color="skyblue">함수(를 가리키는)</font> 포인터 ptr <font color="pink">int형 nbr을 인자로 받는</font> 함수 포인터 ptr <font color="pink">int형 포인터를 반환하고</font> <font color="orange">int형 nbr을 인자로 받는 </font> 함수 포인터 ptr <font color="orange">int형 <font color="pink">포인터를 가리키는</font> 포인터를 반환하고 int형 nbr을 인자로 받는</font> 함수 포인터 ptr <font color="orange">int형 <font color="pink">상수</font> 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는</font> 함수 포인터 ptr int형 상수 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr
char *(*arr[42])(int *ptr);
Plain Text
복사
<font color="skyblue">arr</font> <font color="skyblue">42 크기의 배열</font> arr 42 크기의 <font color="skyblue">포인터</font> 배열 arr 42 크기의 <font color="skyblue">함수</font> 포인터 배열 arr <font color="pink">int형 포인터 ptr을 인자로 받는</font> 42 크기의 함수 포인터 배열 arr <font color="pink">char형 포인터를 반환하고 </font> <font color="orange">int형 포인터 ptr을 인자로 받는</font> 42 크기의 함수 포인터 배열 arr char형 포인터를 반환하고 int형 포인터 ptr을 인자로 받는 42 크기의 함수 포인터 배열 arr