Basic Knowledge (8) 썸네일형 리스트형 (07) C언어기초 - 함수 선언, 정의 함수 접근 제어자가 없다 (public, private 등) c의 함수는 기본적으로 모두 전역(global) 함수이다 함수 오버로딩(overloading)은 없다 c에서는 함수 선언이 함수를 사용하기 전에 나와야 한다고 배웠다 하지만 아래 경우에는 컴파일 오류가 발생하지 않는다(?!) #include int main(void) { int x = foo(); getchar(); return 0; } int foo(void) { printf("foo called"); return 0; } 반대로 이 경우에는 컴파일 오류가 발생한다 #include int main(void) { foo(); getchar(); return 0; } void foo(void) { printf("foo called"); } 그 이.. (06) C언어기초 - 반복문 for 초기화 코드에 size_t i = 0 못쓴다 예시) for (size_t i = 0; i < 10; i++) { /* 오류!! 변수 선언은 항상 블럭 처음 시작할 때!! */ printf("%d\n", i); } while 조건식이 0이 아니면 모두 참으로 판단하지만 정확히 해주기 위해 (변수 != 0) 아니면 (변수 == 0) 처럼 명시해주자 (04) C언어기초 - 자료형(2) long long은 최소 32비트 int이상의 크기 최소 64비트인 정수형은 c89에는 없다 포팅 안전한 범위는 int와 같다 long의 리터럴은 숫자 뒤에 l을 붙인다 1 뒤에 l이 오면 잘 안보여서 L을 사용하기도 한다 float 부동 소수점 자료평 IEEE 754로 정해졌다 하지만 C는 CPU가 IEEE 754를 지원하는 실수 계산 장치를 장착하기 전부터 쓰였다 C89 표준에서는 크기 char 이상이기만 하면 된다 (IEEE 754가 아닐수도 있다) unsigned 없다 보통 안전한 크기는 32비트 float의 리터럴은 숫자 뒤에 f double 크기 float 이상이면 된다 float은 double보다 빠르게 연산하기 위해 만든 작은 부동소수점 자료형이다 float과 마찬가지로 IEEE float.. (03) C언어기초 - 자료형(1) char 형 C89 표준에 따르면 char은 최소 8비트인 정수형이다 보통 char형 == 1byte로 알고 있는 사람이 많지만 표준에 따르면 바이트가 아닌 비트로 나타낸다 이유는 바이트의 크기를 8비트로 고정시켜두지 않았기 때문이다 1byte는 항상 8bits가 아니라는 뜻이다 char을 '최소' 8bits인 정수형이라 표현했는데 최소라고 표현한 이유는 컴파일러마다 다르게 적용시킬 수 있게끔 설계하라는 뜻이다(?) char이 몇 비트인지 찾는 법은 헤더에서 CHAR_BIT를 보면 알 수 있다 1byte를 CHAR_BIT만큼이라고 말한다 즉, 가장 작은 단위를 CHAR_BIT크기인 1byte로 한다는 것이다 소형 기기에서는 공간이 충분하지 않을 수 있어서 char의 크기를 유동적으로 사용할 수 있게 했다.. (02) C언어기초 - int main(void) C언어로 프로그래밍을 할 때 필수로 사용해야 하는 함수인 main 함수입니다. #include int main(void) { printf("Hello World!\n"); return 0; } 보통, void를 사용하지 않는 분들도 많습니다. 굳이 void를 사용하지 않아도 매개변수라 없다는 뜻으로 알고 계시기 때문이죠. 하지만, 일부는 틀렸습니다. 매개변수 칸을 비워둔다고 해서 매개변수를 받지 않을 것이라는 뜻은 아니거든요. 예를 들면, int foo1(); int foo1(int a) { return a; } 이 코드는 컴파일이 됩니다. foo1() 함수는 반환형이 int이고, 매개변수를 받지만 자료형이 정해지지 않았다는 의미이기 때문이죠. 길게 말할 것 없이 int foo1(); /*매개변수 받음 .. (01) C언어기초 - #include <stdio.h> 전처리기(prerocessor)는 C 컴파일러가 프로그램을 컴파일하기 전에 자동으로 사용되는 매크로 프로세서(macro processor) 입니다. #은 디렉티브(directive)로 줄의 처음에 사용됩니다. 이 디렉티브는 전처리기가 할 일을 인식하게 도와줍니다. 또, 전처리기는 모든 주석을 스페이스로 바꿉니다. (즉, 주석을 없앱니다.) #include는 전처리기가 읽고 처리해주는 매크로 입니다. 전처리기는 #include를 만나면 아래 예시처럼 실행됩니다. (시스템에 내장된 헤더파일을 가져오려면 유저가 만든 헤더파일을 가져오려면 "파일명.h") header.h char *test(void); main.c int x; #include "header.h" int main(void) { puts(test(.. (00) C언어기초 - C89표준 C언어의 기초인 C89 표준을 몇가지 설명 드릴까 합니다. 앞으로 제가 작성하는 코드는 모두 C89 표준에 맞춰서 작성되니 참고 바랍니다. C89 표준은 한 줄 주석( // )이 존재 X #include int main(void) { /*print "Hello World!\n" to terminal*/ C89 표준 //print "Hello World!\n" to terminal C89 표준 X printf("Hello World!\n"); return 0; } 함수의 선언의 void는 꼭 넣어주는게 좋음 intfoo1(); /* 매개변수가 있을지도 모르는 foo1 함수 선언*/ intfoo2(void);/* 매개변수가 없는 foo2 함수 선언*/ intfoo1(int a, int b) /* 가능 */ .. C언어를 더 깊게 알아보자 필자는 C언어를 대충 알고있다 if while for 포인터 구조체를 선언하고 사용할 수 있다 하지만 컴파일러와 메모리가 내부에서 어떤 방식으로 운용되는지는 모른다 컴공 전공이 아니기에 컴퓨터 구조에 관한 지식은 하나도 없다 42서울 본과정을 진행하면서 컴퓨터 구조와 컴파일러에 관한 깊은 탐구가 필요하다고 느꼈다 이왕 코드를 작성하려면 효율적이게 해야하지 않겠나 독학으로 C언어를 깊게 공부하면서 노트 정리 식으로 블로그를 적을 예정이다 이전 1 다음