C 언어
[C언어] 가변 길이 배열(Variable-length Array)를 사용할 때
[C언어] 가변 길이 배열(Variable-length Array)를 사용할 때
2021.01.23가변 길이 배열(Variable-length Array)은 배열의 크기를 컴파일 타임에 정하지 않고 실행 타임에 정할 수 있도록 하는 기능이다. TLDR; malloc은 메모리 수동 관리, VLA는 자동 관리 C11에서는 지원이 필수가 아님 -> C++17에서도 지원이 필수가 아님 VLA는 편리하지만 큰 크기의 배열을 사용할 때에 적합하지 않음 malloc과 VLA C99 에서는 해당 기능을 제공한다. int input_array_size(int size) { int array[size]; ... return 0; } 해당 기능을 지원하지 않는 C 버전을 사용할 때에는 아래와 같이 malloc을 이용해서 위 기능을 구현할 수 있지만, 그래도 위 기능을 직접 사용한다면 더욱 편리하게 구현할 수 있다. in..
[C 언어 강좌] C 언어 강좌 모아보기
[C 언어 강좌] C 언어 강좌 모아보기
2017.02.09C 언어 강좌 모아보기인터넷을 보면 수많은 C 언어 강좌가 있습니다. 하지만 대다수의 C 언어 강좌들이 대부분 표준과 어긋나는 내용을 설명하거나 잘못된 내용을 설명하는 경우가 많았습니다. 표준을 지키지 않을 경우 컴파일러를 변경했을 때 비표준으로 작성해왔던 습관들이 큰 사고를 일으킬 수도 있습니다. 하지만 이 블로그의 강좌는 C 언어의 레퍼런스 문서를 기초로 작성되어서 잘못된 내용이 극히 드뭅니다.C 언어 자체는 지원하는 기능이 적어서 배우기가 크게 어렵지 않습니다. 실제로 다른 프로그래밍 언어를 경험해본 적이 있는 사람이라면 기본적인 문법 정도는 늦어도 며칠, 빠르면 몇 시간 내에 습득이 가능할 정도입니다. 하지만 기능이 적다고 결코 쉽게 생각하면 안 됩니다. 가장 많은 사람이 포기한다는 포인터 부분만..
[C 언어 기초] 23. int형이 아닌 정수형
[C 언어 기초] 23. int형이 아닌 정수형
2017.02.09int형이 아닌 정수형정수를 처리해야 하는 일이 생겼을 때 int형만으로도 충분합니다. 하지만, C 언어에서는 int형이 아닌 다른 정수형들도 제공하고 있습니다.C 언어는 기본 정수형을 변경할 수 있는 세 개의 형용사 키워드 short, long, unsigned를 제공합니다.short int형(또는 short형)은 int형보다 더 적은 기억 공간을 사용할 수도 있습니다. 그래서 작은 수를 저장할 때 메모리를 절약할 수 있습니다. int형과 마찬가지로 short형도 부호가 있는(signed) 데이터형입니다.long int형(또는 long형)은 int형보다 더 큰 기억 공간을 사용할 수도 있습니다. 그래서 더 큰 정수값들을 표현할 때 사용합니다. int형과 마찬가지로 long형도 부호가 있는 데이터형입니다..
[C 언어 기초] 22. 8진수와 16진수
[C 언어 기초] 22. 8진수와 16진수
2017.01.198진수와 16진수일반적으로, C 언어는 정수형을 10진수 형태로 작성할 것으로 생각합니다. 하지만 많은 프로그래머는 8진수(기수 8)와 16진수(기수 16)로 작성하기를 원합니다. 8진수와 16진수는 2의 거듭제곱이라서 컴퓨터와 관련된 값들을 표현하는 것이 10진수보다 편리합니다. 예를 들면, 16비트 컴퓨터에서 자주 등장하는 수인 65536을 16진수로 나타내면 10000이 됩니다.16진수는 숫자를 4비트 단위로 끊어서 인식합니다. 예를 들면, 16진수 숫자 3은 0011이고, 16진수 숫자 5는 0101입니다. 그래서 16진수 값 35는 비트 패턴이 0011 0101이고, 16진수 값 53은 0101 0011이 됩니다. 이처럼 인식하는 것이 16진수와 2진수(기수 2)를 전환하는 것을 더욱 쉽게 만듭..
[C 언어 기초] 21. 기본 데이터형 int
[C 언어 기초] 21. 기본 데이터형 int
2017.01.17기본 데이터형 int이제부터 C에서 사용하는 기본 데이터형의 특징을 살펴볼 것입니다. 여러가지 데이터형의 변수를 선언하는 방법, 5 또는 2.78과 같은 리터럴 값으로 상수를 나타내는 방법, 변수를 사용하는 방법을 설명할 것입니다. 일부 오래된 C 컴파일러들은 일부 데이터형들을 지원하지 못할 수도 있으니 어떤 데이터형을 사용할 수 있는지 미리 확인해주세요. int형 C는 다양한 정수형을 제공합니다. 굳이 여러 개를 제공하는 이유는 프로그래머가 용도에 따라 선택해서 사용할 수 있게 하기 위해서입니다. 특히, C의 정수형들은 제공되는 값의 범위와 음수의 사용 여부에 따라서 자료형이 달라질 수 있습니다. 정수의 기본 형태는 int형이지만, 특정 작업을 할 때나 컴퓨터의 요구에 따라 다른 선택을 해야 할 수 있..
[C 언어 기초] 20. 데이터형을 나타내는 키워드
[C 언어 기초] 20. 데이터형을 나타내는 키워드
2017.01.13데이터형을 나타내는 키워드변수와 상수 컴퓨터는 프로그램이라는 것을 이용해서 많은 일을 합니다. 수를 더하고, 스피커 또는 화면을 출력하거나, 전화를 거는 등 이외에도 독자가 생각할 수 있는 모든 일을 할 수 있습니다. 이러한 일들을 하기 위해서는 프로그램이 정보를 담고 있는 수와 문자들 즉, 데이터를 가지고 작업해야 합니다. 어떤 종류의 데이터는 프로그램이 사용되기 전에 값이 미리 정해지며, 프로그램이 실행되는 동안 그 값이 변하지 않고 유지됩니다. 이러한 데이터를 상수(constant)라 합니다. 상수와는 달리 프로그램이 실행되는 동안 대입되거나 연산 등을 통해서 값이 변하는 데이터를 변수(variable)라 합니다.예제 3-1 프로그램에서 cm은 변수이고, 1과 2.54는 상수입니다. 프로그램에서 변..
[C 언어 기초] 19. 새로운 예제 프로그램
[C 언어 기초] 19. 새로운 예제 프로그램
2017.01.11새로운 예제 프로그램우리는 컴퓨터에 숫자, 문자 혹은 단어나 문장을 넣어주고, 컴퓨터가 그 데이터를 이용해서 어떤 일을 해주기를 기대합니다. 이처럼 컴퓨터는 작업할 때 데이터를 가지고 작업합니다. 예를 들면, 지불할 이자를 계산한다거나, 리스트를 정렬해서 보여주는 등의 일을 할 수 있습니다. 이번 장에서는 읽어온 데이터를 조작하는 방법에 대해서 배울 것입니다.이장의 목표는 C에서 사용되는 기본 데이터형 정수형과 부동소수점형의 차이에 대해서 알아본 뒤, 그 데이터들이 무엇을 의미하는지, 어떻게 선언하는지 그리고 언제 어떻게 사용하는지를 배우는 것입니다. 또한, 상수와 변수에 차이에 대해서도 설명할 것입니다. 이제 다시, 새로운 예제 프로그램을 만나볼 것입니다. 지금까지와 마찬가지로, 몇 가지 낯선 것들이 ..
[C 언어 기초] 18. Chapter 2 정리
[C 언어 기초] 18. Chapter 2 정리
2017.01.11Chapter 2 정리 Chapter 2의 주요 개념프로그래밍은 세세한 부분까지 주의를 집중해야 하며, 추상적이고 개념적으로 생각해야 합니다. 컴퓨터에 명령을 내릴 때는 세세한 부분까지 신경을 써야 합니다. 친구와 이야기할 때는 한두 개의 문법적인 오류를 저지르거나 부정확한 단어들을 사용하더라도 무슨 말을 하려는지 대충 이해할 수 있겠지만, 컴파일러는 그렇지 않습니다.이번 장의 목표는 C 언어가 무엇인지 이해하는 것입니다. 프로그램을 작성해서 독자가 원하는 방식으로 컴퓨터가 행동하도록 준비하는 과정이라 할 수 있습니다. 컴파일러는 독자가 작성한 프로그램을 기계어로 바꾸는 매우 세밀한 작업을 수행합니다. 컴파일러는 지능이 없으므로 컴파일러가 이해할 수 있는 용어로 표현해야 하는데, 그 용어들이 바로 C 언..
[C 언어 기초] 17. 키워드와 예약된 식별자
[C 언어 기초] 17. 키워드와 예약된 식별자
2017.01.10키워드와 예약된 식별자키워드는 C가 특별한 용도로 사용하는 어휘라서 식별자나 변수의 이름으로 사용할 수 없습니다.다음 리스트에서 굵게 표시한 것은 C90 표준에서 추가된 키워드이고, 기울여 표시한 것은 C99 표준에서 추가된 키워드입니다. 또, 굵고 기울여 표시된 것은 C11 표준에서 추가되었습니다.C의 키워드들 auto extern short while break float signed _Alignas case for sizeof _Alignof char goto static _Bool const if struct _Complex continue inline switch _Generic default int typedef _Imaginary do long union _Noreturn double reg..
[C 언어 기초] 16. 디버깅
[C 언어 기초] 16. 디버깅
2017.01.10디버깅프로그램을 작성하는 도중 오타를 입력하는 등의 실수를 해서 에러를 발생시킬 수 있습니다. 프로그램에서의 에러를 흔히 버그라 하고, 에러를 찾아 고치는 것을 디버깅이라 합니다.예제 2.4는 에러가 몇 개 있는 프로그램입니다. 몇 개의 에러가 있을까요?예제 2.4 - error.c 프로그램/* error.c -- 에러가 몇 개 있는 프로그램 #include int main(void) ( int n1, int n2, int n3; n1 = 10; n2 = n1 * n1; n3 = n2 * n2; printf("n1 : %d, n1의 제곱 : %d, n1의 세제곱 : %d", n1, n2, n3) return 0; )신택스 에러(Syntax Error)예제 2.4는 신택스 에러를 가지고 있습니다. 신택스 ..
[C 언어 기초] 15. 사용자가 정의한 함수
[C 언어 기초] 15. 사용자가 정의한 함수
2017.01.07사용자가 정의한 함수지금까지의 예제들은 표준 함수 printf()만을 사용했지만, 예제 2.3은 직접 만든 함수를 사용할 것입니다.예제 2.3 - third.c 프로그램 // third.c -- 하나의 파일에서 두 개의 함수를 사용 #include void call(void); int main(void) { printf("call() 함수를 호출합니다. \n"); call(); printf("프로그램을 종료합니다. \n"); return 0; } void call(void) { printf("call() 함수를 성공적으로 호출했습니다! \n"); }프로그램의 출력은 다음과 같습니다.call() 함수를 호출합니다. call() 함수를 성공적으로 호출했습니다! 프로그램을 종료합니다.call() 함수는 이 프..
[C 언어 기초] 14. C 언어 더 알아보기
[C 언어 기초] 14. C 언어 더 알아보기
2017.01.03C 언어 더 알아보기첫 번째 예제는 아주 쉬웠습니다. 이번에 설명할 예제 2.2도 그다지 어렵지 않습니다.예제 2.2 - second.c 프로그램#include int main(void) { int num1, num2; num1 = 10; num2 = num1 * 10; printf("num1 = %d, num2 = %d \n", num1, num2); printf("num2 = %d \n", num1 * 10); return 0; }CodeHighlighter이 코드는 주석을 사용하고 있습니다. 또, 변수를 선언한 뒤 곱셈을 하고 그 값을 출력합니다. 이제부터 이것들에 대해 자세히 알아봅시다. 문서화 먼저, 이 프로그램은 프로그램의 목적을 주석으로 설명합니다. 이렇게 주석을 적어주는 것은 시간이 거의 ..