목록Programming Language/C (14)
배움 저장소
16.1 전처리기가 해주는 일들 전처리기 이름은 컴파일러를 기준으로 만들었다. Visual Studio에서 "전처리기->컴파일러->링커->실행파일"을 빌드라 부른다. 컴파일이라 부르기도 한다. 16.2 전처리를 준비하는 번역 단계 전처리기가 하는일 Translating Translating Preprocessing Compiling Linking Executable Tranlating을 전처리 이전 단계로 구분하여 보는 관점이 있다. Translating을 전처리 과정에 포함하여 보는 관점이 있다. Deprecated 옛날 키보드는 다양한 문자를 지원하지 않았다. 전처리기가 ?? + 'character" 조합으로 여러 문자를 만들어냈다. 이를 사용하기 위해서 컴파일러 옵션을 설정해줘야 한다.command..
15.1 비트단위 논리 연산자 비트단위 논리 연산자는 낱개로 사용한다 C언어에서 거듭제곱 연산자(^)를 지원하지 않는다. ^연산자는 bitwise에서만 사용한다. Bit 연산자의 활용 bitwise 연산을 통해 메모리 낭비를 줄일 수 있다 Bitwise And & Bitwise OR | Bitwise Excluesive OR ^ Bitwise Not~ 15.2 이진수를 십진수로 바꾸기 연습문제 #include // pow() unsigned char to_decimal(const char binary_digit[]); int main() { printf("Binary (string) to Decimal conversion\n"); printf("%d\n", to_decimal("00000110")); p..
14.1 구조체가 필요한 이유 1. 여러 자료형 배열을 Index base로 관리하기 어렵다 2. 구조체를 이용하여 Tag 하나로 관리할 수 있다 - 구조체 내부 member variable에 접근하기 위하여 Dot(.) Operator를 사용한다. - 메모리를 효율적으로 사용하기 위해 멤버 member variable 사이에 빈공간(padding)을 둔다. 14.2 구조체의 기본적인 사용법 #define MAX 41 struct person // person is a tag of structure { char name[MAX];// member int age; // member float height; // member }; int main() { int flag; // Receives return v..
13.1 파일 입출력의 작동 원리 - 프로그램을 실행하면 운영체재와 소통할 수 있는 채널이 3개 열린다. stdout, stderr, stdin이다. - stdout과 stderr은 별도의 채널을 가지고 있다. redirection(파일의 출력값을 다른 파일의 입력값으로 사용) 때 이를 활용할 수 있다. - 한 글자씩 통신하면 느리기 때문에 buffer를 이용하여 데이터를 주고받는다. 텍스트/바이너리 파일 주고받기 혼합하여 사용할 수 있다. fprintf( ) 함수는 텍스트 파일 IO 스트림에 해당 데이터를 저장한다. fwrite( ) 함수는 바이너리 파일IO 스트림에 해당 데이터를 저장한다. 13.2 텍스트 파일 입출력 예제 int main(int argc, char* argv[]) { int ch; ..
12.1 메모리 레이아웃 훑어보기 Read Only Memory(Text Segment) 프로그램이 시작되면 해당 프로그램을 실행하기 위한 코드가 Read Only Memory에 저장된다. 직접 작성한 코드가 저장되는 곳이다. 이 Memory는 프로그램이 끝날 때까지 변경되지 않는다. C++에서 가면 프로그램도 코드도 동적으로 변화시킬 수 있다. 프로그램을 실행하며 필요할 때마다 코드를 가져와 실행시킨다. Global Variable 전역변수 Data 영역은 BSS와 Data Segment로 나뉜다 BSS는 초기화되지 않은 global/static 변수가 저장된다. 모두 0으로 초기화 된다. Data Segment에는 초기화된 globa/static 변수가 저장된다. g_i와 g_j는 어디에서나 접근이 ..
11.1 문자열을 정의하는 방법 'H' 'e' 'l' 'l' 'o' '\0' ? ? ? 특정 컴파일러는 비어있는 공간을 '\0'으로 채워준다. Put( ) 함수의 활용법 #define MESSAGE "A Symbolic string constant" #define MAXLENGTH 81 puts("Puts() adds a newline at the end"); puts(MESSAGE); char words[MAXLENGTH] = "A string in an array"; puts(words); char Nums[50] = "One " "Two " "Three " "Four "; puts(Nums); Output Puts() adds a newline at the end A Symbolic string c..
10.1 배열과 메모리 - 배열의 인덱스는 (해당 값의 주소 - 첫 값의 주소) / sizeof(자료형)과 같다 - 배열의 이름은 첫 값의 주소를 가리킨다. 따라서 Ampersand(주소 연산자) 없이도 포인터에 할당할 수 있다. - 배열의 이름이 첫 값의 주소를 가리키는 이유는 계산 과정에서 포인터로 형변환 되기 때문이다. - 배열의 이름은 L Value로 저장공간을 차지한다. 10.2 배열의 기본적인 사용방법 int nums[3] = {0,1,2}; // O : Initialization nums[3] = {10, 11, 12}; // X : Error, unexpected behavior 초기화 할 때만 나열한 된 값을 배열에 할당할 수 있다. 그 외에는 불가능하다. int nums[3] = {0,..
9.2 함수의 프로토타입 // prototype void print_multiple_chars( ); void print_multiple_chars(char, int, bool); int main() { print_multiple_chars('*', WIDTH, true); } void print_multiplechars(char c, int width, bool DoesNewlineNeeded) { // sth.... } 함수의 프로토타입에서 매개변수를 지정하지 않고 비워놓아도 상관없다. 혹은 자료형만 표기할 수도 있다. 9.3 함수의 자료형과 반환값 정수형 반환 자료형은 생략 가능하다. 반환 자료형이 없다면 정수형으로 가정한다. 9.5 지역변수와 스택 int main() { // Main scope ..