programming language/C9 c언어 소스 코드를 실행하는 과정 c언어는 흔히 컴파일 언어라고 불립니다. 컴퓨터에서 ide나 메모장을 통해서 소스 코드를 적습니다. #include ... 로 시작해서 헤더에 포함된 함수를 기반으로 소스 코드를 작성하죠. 그러나 이러한 소스 코드는 결국 컴퓨터가 이해할 수 있는 형식으로 변환되어야 합니다. 여기에는 생각보다 많은 과정이 포함되며, 위와 같은 과정을 통해서 실행이 됩니다. 전처리 단계는 #으로 시작하는 많은 부분을 전처리합니다.컴파일 단계는 어셈블리어로 바꾸는 과정을 거칩니다. 이 때는 cpu의 아키텍쳐에 맞는 명령어 세트로 바뀌게 됩니다.어셈블 단계는 이러한 어셈블리어 파일을 가지고 기계어로 변환해줍니다. 0과 1의 조합으로요.링크 단계는 이러한 기계어 파일들을 묶어주는 역할을 하며 .out 파일로 나오게 됩니다. 2024. 9. 22. [C언어] 14강 구조체 14강 구조체 구조체란 간단한 변수나 배열로는 나타내기 어려운 데이터들을 나타내는 방법 코드로 예를 들어 보면,#include struct Point{ int x; int y;}p1, p2, p3;int main(){ p1.x = 100; p1.y = 0; p2.x = 0; p2.y = 100; p3.x = 100; p3.y = 100; printf("%d %d\n", p1.x, p1.y); printf("%d %d\n", p2.x, p2.y); printf("%d %d\n", p3.x, p3.y); return 0;}이러한 구조체 멤버 변수 출력을 할 수 있을 것입니다. 아래는 구조체 포인터를 가지고 출력하는 방법입니다. 위와 같이 여러 변수와 배열.. 2023. 2. 26. [C언어] 13강 파일 입출력 이진 모드는 0, 1로 구성된 파일 텍스트 모드는 문자로 구성된 파일 명령행 인자 int main(int argc, char *argv[]){...} 에서 argc, argv가 여기에 해당함 //argc는 두번째 인자인 argv의 크기를 의미 //argv[0]은 실행하는 프로그램의 패스를 의미하고 //argv[1], argv[2]... 순으로 첫째 인자, 둘째 인자 등을 나타낸다 int getc(FILE* stream); //getchar와 다른 점은 fp로 식별된 파일에서 문자를 추출 int putc(int character, FILE* stream); int putc(int character, FILE* stream); //putchar와 유사한 기능 가짐 //그러나 파일을 읽다가 끝에 도달하면 EO.. 2023. 2. 22. [C언어]12강 기억 클래스, 연결, 메모리 관리 저장 클래스는 객체 지향 프로그래밍에서 객체를 생성할 때 그 객체가 어떤 메모리 영역에서 살아남을지를 결정하는 방식 스코프는 하나의 변환 단위(파일) 내에서 변수나 함수의 유효 범위를 나타내는 개념 연결은 다른 스코프에 속하는 변수들을 서로 연결하는 것을 의미한다 ㄱ. 무연결 : 지역 변수가 가지는 특징이다 함수 영역인 block scope 내에 선언되어 있음 ㄴ. 내부 연결 : 하나의 파일에서만 사용 가능함 ㄷ. 외부 연결 : 여러 파일에서 사용 가능함 자동 변수 블록 내에서 선언된 변수를 의미하며 블록의 실행이 끝나면 메모리에서 사라짐 레지스터 변수 CPU 레지스터에 저장되어 신속하게 접근 가능함 레지스터에 저장할 수 있는 조건이 매우 제한적이기 때문에 자동 변수로 보내는 경우 있음 정적 변수 프로그.. 2023. 2. 17. [C언어] 11강 문자열과 문자 I/O 함수 문자열이란 보통 char var[size] = “abcde fgh”; 이런 식으로 선언이 된다 배열은 값을 변경할 수 없는 포인터, 즉 포인터 상수이다. 문자 입력에서는 먼저 배열을 선언한 즉시 문자열로 초기화해야 한다 문자 입력 함수는 다음과 같다 char* fgets(char* str, int num, FILE* stream); //1번 인자는 문자열을 저장할 char 배열을 가리키는 포인터 //2번 인자는 읽어들일 최대 문자 수 //3번 인자는 문자열을 읽어들일 스트림의 file 객체를 가리키는 포인터 //리턴값은 str이다 //결과를 "\n"이 나올 때까지 string에 저장하고, 스트링 끝에 "\0"을 추가한다 //읽은 문자 수가 n - 1일때까지 문자를 읽는다 char* gets_s(char*.. 2023. 2. 17. [C언어]10강 포인터와 배열 10강 포인터와 배열 배열이란 같은 타입의 변수들로 이루어진 유한 집합이며 인덱스는 0부터 시작한다포인터란 메모리의 주소값을 저장하는 변수이다 보통 포인터의 크기는 32비트 컴파일러에서는 4바이트, 64비트 컴파일러에서는 8바이트가 나온다.예시>메모리에서 일정 범위를 이동하며 위의 short 자료형은 2바이트로 구성되어 있으며 2바이트마다 pointer 역시 이동하면서 추가된다 주소값 => 해당 데이터가 저장된 메모리의 주소 의미32비트: 16진수 8자리0x00000000 ~ 0xFFFFFFFF예) 0x008AF7FC 64비트: 16진수 16자리0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF예) 0x00000000008AF7FC 16진수는 0부터 9까지, 그리고 A부터 F까지 16.. 2023. 2. 10. [C언어] 9강 함수 함수 사용 이유: 반복작업에 들어가는 메모리와 시간을 절약하게 해줌 함수의 기본 구조 void func(void) { statement; } 여기서 앞부분의 void는 리턴할 값이 없음을, 괄호 안의 void는 인자가 없음을 의미함 재귀 자기 자신을 불러오는 것 주로 반복적인 실행에 사용이 됨 재귀의 동일한 레벨에는 동일한 주소가 할당됨 재귀의 장점 구조가 단순하다 재귀의 단점 컴퓨터 메모리를 급격하게 소모한다 헤더파일을 새로 만들어서 여러 소스 파일에서 사용하는 함수를 보관하는 것도 좋은 방법이다 포인터는 주소를 저장하는 변수이다 이런 식으로 변수의 속한 위치, 변수 그리고 값, 메모리 위치를 나타낸다 2023. 2. 10. [C언어] 7, 8장: if-switch문, 문자 입출력 7장 분기와 점프 if문: if (expression) statement=> expression이 true이면 statement가 실행됨 if문 구조if (experiment1){statement1}else if (experiment2){statement2}else{statement3} switch문 구조 switch(choice){case ‘a‘: statement1;break; case ‘b’: statement2;break; //…… default: statement0; //choice가 어디에도 포함되지 않을 때} default와 case는 switch문에서만 사용된다 C는 세 가지 논리 연산자를 가짐 조건 연산자: ?식1 ? 식2 : 식3식1이 참(1)이면 조건문은 식2와 같은 값을 가지고 거짓.. 2023. 2. 4. [C언어] 1~6강 내용 정리 1장: 동계 방학 C언어 스터디 내용 티스토리에 공유 예정참고도서 C Prime Plus 6th editionhttps://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321928423 Amazon.comEnter the characters you see below Sorry, we just need to make sure you're not a robot. For best results, please make sure your browser is accepting cookies.www.amazon.com컴구조 운영체제를 공부하기 전에 C언어를 꼭 공부해 놓아야 할 필요성이 생겨서 스터디 내용을 정리할까 한다 본인 과는 C언어를 배우지 않아서 별도로 .. 2023. 1. 13. 이전 1 다음