목록C언어/독하게 시작하는 C 프로그래밍 (21)
문타쿠, 공부하다.

함수 포인터 함수의 이름(=주소 상수)을 저장할 수 있는 포인터 함수호출 연산자의 피연산자가 될 수 있음 반환자료형(호출규칙 *변수명)(매개변수) 형식으로 선언 호출규칙은 생략 가능 32비트 호출규칙: __cdecl(C언어 기본), __stdcall, __fastcall 64비트 호출규칙: __fastcall #include double Average(int num1, int num2, int num3) { double avg = (num1 + num2 + num3) / 3.0; return avg; } int main(void) { double(*myAverage)(int, int, int) = Average; printf("나의 평균 점수는 %.2f점입니다.\n", Average(88, 99, 100..

#include 컴파일 전에 선행처리를 위한 문법 헤더 포함 조건부 컴파일 심복릭 상수 정의 매크로 정의 '#' 기호로 시작 헤더 파일(선언 코드가 들어 있는 파일)을 소스코드에 합쳐주는 기능 -> .c파일과 .h파일을 합침 로 포함 시 컴파일러가 정의하고 있는 시스템 헤더 파일들 중 검색 " "로 포함 시 현재 경로에서 파일 검색 #pragma once -> '헤더가 중복 인클루드 했을 때 한 번만 인클루드 해라'라는 의미 #define과 매크로 정의 #define 형 한정에 const처럼 심볼릭 상수를 정의할 수 있는 전처리기 정의한 상수는 컴파일 전에 적용되어 소스코드를 치환 매크로 #define 전처리기로 정의 함수처럼 보이지만 함수가 아님 함수 호출에 의한 오버헤드가 없음 컴파일러 최적화에 따라..

형 한정어와 컴파일러 최적화 소개 형 한정어 (Type qualifier) 변수에 적용하는 문법으로 컴파일러 최적화에 깊이 관련 컴파일러를 사용하는 언어의 가장 큰 장점 중 하나가 바로 최적화 const 변수를 상수화하는 문법 = 변수에 저장된 초깃값을 변경할 수 없도록 함 개념상 읽기 전용으로 만들어 주는 것 변수의 개수가 줄어들기 때문에 성능 최적화(Release mode)에 유리 volatile const와 반대로 변수를 최적화에서 제외하는 것 즉, 컴파일러가 최적화라는 것을 할 때 해당 변수는 무조건 존재해야 하므로 최적화에서 제외시키라는 뜻 주로 임베디드 시스템 개발에서 사용 extern typedef 심볼릭 상수 읽기 좋은 코드를 만드는 방법으로, 프로그램 내부에서 특별한 의미를 갖는 기준 값..

파일 시스템 기본 이론 - 첫 번째 컴퓨터 = CPU + RAM + 보조기억장치(HDD/SSD) CPU 연산자를 통해 관리/사용한다. RAM = 1차 메모리 변수를 통해 관리/사용한다. 휘발성이고 용량이 작다는 특징이 있다. HDD나 SSD와 같은 보조기억장치 = 2차 메모리 데이터량이 굉장히 많아 파일 시스템으로 관리한다. 비휘발성이고 용량이 크다는 특징이 있다. 파일 시스템 '파일'이란 기본적으로 하나의 단위라고 할 수 있다. 윈도우 파일 시스템(NTFS)에서는 논리 드라이브 단위 및 경로 사용 파일 시스템은 덩치가 굉장히 크고 용량도 커서 분할 작업을 함 논리적 분할: 물리적으로 한 개인 디스크를 논리적으로 여러 개가 되도록 분할하는 것(=파티셔닝) 절대 경로 = 전체 경로 = Full Path =..

구조체 선언 및 정의 여러 자료형을 모아 새로운 하나의 형식으로 기술/선언 배열은 같은 것이 모인 것이며 구조체는 서로 다른 것들이 모인 것으로 이해할 수 있음(인덱스는 없음) 구조체는 하나의 새로운 사용자 정의 형식으로 작동 구조체를 이루는 요소를 멤버라고 부름 구조체 변수를 통해 개별 요소에 접근할 때는 멤버 접근 연산자(.)를 사용 구조체 변수(혹은 인스턴스) 선언 시 초깃값을 기술할 때는 반드시 멤버 선언 순서에 맞춰야 함 typedef 선언을 동반하는 것이 일반적 #include #include struct USERDATA { int age; char name[32]; char phone[32]; }; int main(void) { struct USERDATA user = { 0, "", "" ..

매개변수 전달 기법 C언어에서는 참조형을 포인터로 구현 인수(상수, 변수), 매개변수, 파라미터, 아규먼트 등은 다 같은 말 매개변수는 Stack 영역 사용 Call by value #include int Add(int num1, int num2); int main(void) { int a = 5, b = 10; printf("5 + 10 = %d\n", Add(a, b)); return 0; } int Add(int num1, int num2) { return num1 + num2; } Call by reference #include int Add(int* num1, int* num2); int main(void) { int a = 5, b = 10; printf("5 + 10 = %d\n", Add(..

컴퓨터 메모리 종류 컴퓨터와 메모리 CPU는 연산할 코드(기계어)와 대상 정보를 모두 메모리로부터 가져옴 메모리는 변수를 통해 사용 모든 메모리는 바이트 단위의 고유한 주소(=위치정보)를 가짐 64bit 시스템에서 메모리 주소 길이는 64bit 메모리 종류 Stack 지역/자동변수, 보통 1MB Heap 동적 할당 메모리 실행 코드 text section(실행 코드 기계어) data section: Read Only(문자열 상수), Read/Write(정적 메모리, 전역변수) 메모리 관리 함수 malloc(), calloc() / free() realloc() memcpy(), strcpy() memcmp(), strcmp() sprintf() C언어는 메모리 관리에 있어서 자유도가 매우 높다. => 그..

사용자 정의 함수 기초 이론 함수는 '반환자료형 이름(매개변수 목록)' 형식으로 기술 호출자(Caller) 함수와 피호출자(Callee) 함수로 관계를 규정할 수 있음(Binding) 호출자는 피호출자 함수의 매개변수 초깃값을 기술해야 할 의무가 있음 피호출자 함수는 호출자 함수에게 값을 반환 C언어는 함수로 시작해서 함수로 끝난다. 함수는 하나의 기능/덩어리/단위로 생각하자. 입출력 함수와 같이 여러 함수들을 합쳐서 C언어의 런타임 Runtime 라이브러리 Library라고 한다. = CRL SDK(Software Development Kit) 어떤 소프트웨어를 만드는 데 필요한 라이브러리를 모아놓은 공구상자 같은 존재 SDK는 라이브러리/API/함수의 집합체 어떤 때는 sdk 또 어떤 때는 라이브러리..

배열의 기본 문법 배열 형식이 같은 자료 여러 개를 모아 한 덩어리로 관리하는 문법 여러 요소를 식별하기 위해 인덱스를 사용하며 0부터 시작 배열의 이름은 0번 요소의 메모리 주소에 대한 식별자이며 상수 문자 배열 (문자열) 문자열의 실체는 char[ ] 문자열 상수란 쓰기가 허용되지 않는 이름이 없는 char[ ] 문자열의 끝은 반드시 \0(NULL) 문자열 상수는 보통 포인터를 사용해 관리 [필수 실습 문제] 배열에서 최댓값 찾기 #include int main(void) { int aList[5] = { 0, }; int max = 0; printf("aList: %d, %d, %d, %d, %d\n\n", \ aList[0], aList[1], aList[2], aList[3], aList[4])..

조건 기반 반복 while과 무한 루프 if문과 유사한 구조 조건식이 참일 경우 구간 코드를 계속 반복해서 수행 반복 수행 구간 코드 내부에서 반복을 멈출 수 있는 연산이 반드시 있어야 함 무한루프는 최악의 논리 오류 중 하나 -> CPU 점유율이 100%가 돼버림 [필수 실습 문제] 한 줄에 * 출력 #include int main(void) { int input = 0; printf("1 ~ 9 중에서 정수를 하나 입력하세요."); printf(">> "); scanf_s("%d", &input); if (input 9) { printf("입력 가능한 숫자는 1 ~ 9입니다."); return 0; } while (input != 0) { printf("* "); input--..