ID를 찾고 그것을 기준으로 연산자 결합 우선 순위를 따져서 문장을 만들어 해석해 나간다.
기호에 대한 문장 해석 방법
* : a pointer to
[N] : an array[N] of
(args) : a function(args) returning
예제
int* foo[10];
// foo -> an array(10) of a pointer to int
void (*(*signal)(int,void(*)(int)))(int);
// signal -> a pointer to a function(int,void(*)(int))
// returning a pointer to a function(int) returning void.
KLDP에 잘 정리된 내용과 예제가 있음
#include <stdio.h>
/*
const 키워드는 바로 앞에 오는 키워드를 꾸민다.
단, const가 가장 앞에 오는 경우에는 const 바로 뒤의 키워드를 꾸민다.
*/
void const_test_f1(const int* pi)
{
int i = 3;
*pi = 1; // error
pi = &i;
}
void const_test_f2(int const* pi)
{
int i = 3;
*pi = 1; // error
pi = &i;
}
void const_test_f3(int* const pi)
{
int i = 3;
*pi = 1;
pi = &i; // error
}
void const_test_f4(const int* const pi)
{
int i = 3;
*pi = 1; // error
pi = &i; // error
}
int main(void)
{
int i = 0;
const_test_f1(&i);
const_test_f2(&i);
const_test_f3(&i);
const_test_f4(&i);
return 0;
}