C 메모
Contents
Convention✔
먼저, 선언의 규칙을 알 수 있는 예시를 들자.
첫번째 const 는 그것의 왼쪽에 있는 char 에 영향을 미친다. * 는 이를 포인터로 만든다. 두번째 const 는 마찬가지로 그것의 왼쪽에 있는 것에 영향을 끼쳐서 상수로 만든다.
-
연속 선언을 사용하면 안된다.
가령
unsigned const* const a, b;를 생각하자. 이때,b는unsigned const타입이다. 즉, 첫번째const는 타입에 영향을 미치고, 두번째const는a에 영향을 미친다. 이처럼 연속 선언은 혼란을 만든다. -
포인터는
null이 아니라고 가정 한다. 이를 위해 포인터 파라미터로 배열 표기(array)를 사용한다./* These emphasize that the arguments cannot be null. */ size_t strlen(char const string[static 1]); int main(int argc, char* argv[argc+1]); /* Compatible declarations for the same functions. */ size_t strlen(const char *string); int main(int argc, char **argv);위 예시의 두 코드 블록은 같은 효과를 내는 선언이다. 그러나 첫번째
strlen과main은 비어있지 않은 포인터를 받는다는 것을 강조한다. -
함수 포인터가
null이 아니라고 가정한다. 이를 위해 함수 포인터 파라미터로 함수 표기를 사용한다./* This emphasizes that the ``handler’’ argument cannot be null. */ int atexit(void handler(void)); /* Compatible declaration for the same function. */ int atexit(void (*handler)(void));위 예시의 두 선언은 같은 효과를 내지만 첫번째 선언은
handler가 비어있지 않은 포인터임을 강조한다. -
변수를 가능한 한 최대한 그것의 첫번째 사용에 가깝게 정의한다.
C 언어 개발자가 빠지는 가장 큰 실수 중 하나는 변수 초기화가 되지 않은 상태이며, 이는 특히 포인터의 경우에 큰 문제가 된다.
-
코드 블록
{ ... }에 프리픽스 표기를 사용한다. 다음 예시가 프리픽스 표기법이다. -
숫자들에 분리 기호를 사용한다.
가령,
라는 숫자를 C23 에서는10'035.677'789로 표기할 수 있다.
Type✔
-
Scalar type: 스칼라 타입은 모두 진리값을 갖는다.

-
Basic type:

-
특수한 경우에 사용되는 타입:

-
Derived data types: C 의 모든 타입은 basic type 에서 파생된다. C 는 데이터를 파생하는 다음과 같은 4가지 방법을 제공한다.
-
array: 같은 기본 타입의 값을 결합한 것.
-
structure: 서로 다른 기본 타입을 결합한 것.
-
pointer: 메모리에 있는 객체를 참조하는 것.
-
union: 서로 다른 기본 타입을 같은 메모리 위치에 오버레이 시키는 것.
5번째 방법인
typedef도 있지만, 이는 새로운 타입을 만드는 것이 아니라 기존의 타입에 새로운 이름을 붙이는 것이다. 이는#define매크로를 사용하는 것과 비슷하다. -
Operator✔
-
Value operators:

-
Object operators:
@는 연산자,o는 오브젝트,a는 추가 값을 의미한다.
-
Type operators:
이 연산자는
size_t타입의 정수 상수를 반환한다.
Literal✔
-
숫자 리터럴

-
정수 리터럴에 사용되는 서픽스(suffix)
