[System Programming] 01 Intro
Published:
In this post, 01 System Programming lecture is introuduced.
C
Dennis Ritchie is a creator of C and Unix.
C 코드를 컴파일시, gcc 대신 gcc800을 많이 사용한다.
gcc800 hello.c // gcc -Wall -Werror - pedantic -std=c99 와 동치gcc800은 다음 기능을 하는 매크로이다.
-Wall: 모든 일반적인 경고 메시지 출력-Werror: 경고를 오류로 취급 (컴파일 실패)-pedantic: C 표준에 맞지 않는 확장 사용 시 경고/에러-std=c99: C 표준을 C99 모드로 설정
gcc를 사용하면 여러 프로그램들이 순차적으로 실행되고 가장 먼저 Preprocessor가 실행된다. #으로 시작하는 모든 구문을 처리한다. Preprocess의 output은 여전히 C 소스코드이다. 이후, C 컴파일러가 실행된다.
Constant
C에서 Constant는 아래의 세 가지 방법으로 만들 수 있다.
#define MAX 10 const int MAX = 10; enum {MAX = 10};sizeof
sizeof는 함수가 아니라 C에서 정의된 연산자로, 컴파일 타임에 계산된다.
double pi[5][2]; sizeof(pi); // 8*5*2=80bytes int *p; void *k; sizeof(p); // 8 sizeof(*p); // 4 sizeof(k); // 8 sizeof(*k); // compile errorString
C에서 문자열은 collection of characters 로 만든다. 이 때, char 형 포인터 변수를 이용하여 만드는 방법과 char 형 배열을 이용하여 만드는 방법이 있는데 메모리와 값의 변경 가능 여부에 대한 차이는 여기 를 참고.
문자열에 대해서,
sizeof는\0을 포함한 크기를 나타내고,strlen은\0을 제외한 길이를 반환한다.char *s = "hello world\n"; char k[20] = "SNU CSE00800"; char arr1[] = "hello"; sizeof(s) // 8 strlen(s) // 12 sizeof(k) // 20 strlen(k) // 12 sizeof(arr1) // 6 strlen(arr1) // 5 char arr2[] = "hello\0"; sizeof(arr2) // 7 저장될때 추가로 \0 더 붙음 strlen(arr2) // 5 # 첫 번재 \0을 만나기 전까지의 개수 출력- null character (널 문자) = 아스키 코드 값이 0 (0x00) 인 문자. 아스키 표에서 이름은 NUL (Null).
- null character (
\0) ≠ NULL (null pointer) ≠ 0'\0': 값이 0인 문자 (char, 길이 1 바이트).NULL: 어떤 것도 가리키지 않는 포인터 상수.0: 정수 값.
Assignment
expression 은 값을 evaluation 한다. 대입 연산자 = 도 expression으로써, 값을 저장하는 효과와 더불어 그 값을 evaluation 값으로 가진다.
int i = 0; int j = 1; i = j = 2; // i==2, j==2위 예제에서 먼저 j는 2로 설정되고 그 evaluation 값 2가 i에 대입된다.

Leave a Comment