[C]선언문 해석하기

JH Bang·2022년 4월 27일
0

C/C++

목록 보기
2/8
post-thumbnail
post-custom-banner

선언문 구성 요소

C언어의 선언문은 포인터, 직접 선언자, 생성자로 구성된다. (선언문은 정의문과는 구분되지만 이 글에서는 선언문을 정의문과 같은 의미로 해석한다. 정의문은 새 객체를 생성할때, 선언문은 만들어진 객체를 참조할 때 사용한다.)

포인터는 다음의 표현 방법으로 나타낸다.

*				  //char *ptr;
*const			  //char *const ptr;
*volatile		  //int *volatile ptr;
*const volatile   //int *const volatile ptr; 
*volatile const   //int *volatile const ptr;

//etc..

식별자는 변수의 이름, 함수의 이름, 배열의 이름 등을 나타낸다.

식별자  		// 변수 x
식별자[사이즈]  // 크기 4의 배열 arr[4] 
식별자(인자)   // x,y를 인자로 받는 함수 add(x,y)

식별자에는 어떤 자료를 나타내는 지에 대한 자료형도 있어야 한다.
int x	// 정수형 변수 선언
char x	// 문자형 변수 선언
float x	// 실수형 변수 선언

//etc..

데이터를 다루는 방식에 대한 것들이다.

static		//정적 변수로 만듦
extern		//외부 변수를 사용
register	//레지스터 메모리를 사용

타입 한정자라는 것들도 있다.
const	  // 수정이 불가한 읽기 전용 값으로 만듦
volatile  // 컴파일러의 최적화 기능을 끔
restrict  // 다른 변수나 포인터의 접근을 막음

이 외에도 선언문에서는 = 을 이용해 초기화를 해줄 수 있고, 콤마(,)를 사용해 여러 변수를 한 줄에 선언해 줄 수도 있다. 선언문의 끝은 세미콜론(;)으로 마친다.


선언문 읽는 법

선언문 규칙

1. 맨 왼쪽에 있는 식별자부터 읽는다.
2. 대괄호 [   ] 가 있으면 배열임을 염두에 둔다.
3. 소괄호 (   )  안에 있는 것은 덩어리로 해석한다.
4. 식별자 왼쪽에 애스터리스크가 붙어 있으면 "~를 가리키는 포인터"로 해석한다. 단, 함수 반환값이 포인터일 경우 오른쪽에 붙어 있다.
5. 포인터일 경우 어떤 자료형을 가리키는지 살펴본다.
     5-1. 단, 오른쪽에 함수를 표시하는 (   ) 가 있으면 "함수를 가리키는~"으로 해석한다.
     5-2. 함수를 가리킨다면, 그 함수는 어떤 자료형을 반환하는지 살펴본다.
6. const 는 그 사이에 어떤 것이 있든   *  와의 상대적 위치를 기준으로 생각한다.

int *const ptr  //상수 포인터, 다른 주소값 할당 불가능
int const *ptr  //상수 참조값, 다른 주소값 할당은 되나 참조 값 변경 불가능
const int *ptr  //*와 const의 상대적 위치만을 살펴보므로 상수 참조값

선언문 예시

int *const *(*ptr)(int nbr);

📌 ptr
📌 포인터 ptr
📌 함수(를 가리키는) 포인터 ptr
📌 int형 nbr을 인자로 받는 함수 포인터 ptr
📌 int형 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr
📌 int형 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr
📌 int형 상수 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr
📌 int형 상수 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr


char *(*arr[42])(int *ptr);

📌 arr
📌 42 크기의 배열 arr
📌 42 크기의 포인터 배열 arr
📌 42 크기의 함수 포인터 배열 arr
📌 int형 포인터 ptr을 인자로 받는 42 크기의 함수 포인터 배열 arr
📌 char형 포인터를 반환하고 int형 포인터 ptr을 인자로 받는 42 크기의 함수 포인터 배열 arr
📌 char형 포인터를 반환하고 int형 포인터 ptr을 인자로 받는 42 크기의 함수 포인터 배열 arr

profile
의지와 행동
post-custom-banner

0개의 댓글