C 언어

C 언어의 선언(Declaration)에 대한 해석 방법

  • 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에 잘 정리된 내용과 예제가 있음

__cdecl 호출 규약

const 키워드 해석 방식에 대한 예제

#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;

}