본문 바로가기
반응형

프로그래밍 언어/C 언어39

[C] [전처리기] 매크로와 선행처리기 매크로와 선행처리기실행파일이 컴파일과 링크의 과정을 거치는데 컴파일 이전에 선행처리 과정을 거친다.▶ 선행처리 → 컴파일 → 오브젝트 파일 → 링크 → 실행 파일※ 컴파일 과정에 포함해서 표현하기도 한다.    한편으로는 컴파일러에 따라서 전처리 과정은 전처리기(preprocessor)라는    별도의 프로그램으로 수행하기도 한다.※ 소스코드가 선행 처리기를 거쳐도 별도의 파일이 생성되는 것은 아니다.    소스파일을 유지 하며, 선행처리 명령문대로 소스코드의 일부를 치환할 뿐이다.    - 컴파일: 오브젝트 파일 생성    - 링커: 실행파일 생성#include #define NAME "TEST"#define PRINT_ADDR puts("주소: xxx-xxx");#define SQUARE(X) X*X.. 2025. 1. 28.
[C/C++] [전처리기] 헤더파일(.h) 만들어서 include 하기 헤더파일(.h) 만들어서 include 하기 헤더파일(.h)에는 함수 원형이나 클래스만 선언한다.내부 구현은 별도의 파일에서 구현한다. [Calc.h]int add(int A, int B);  [Calc.cpp]#include "Calc.h"int add(int a, int b) { return a + b;}  [main.cpp]#include #include "Calc.h"int main() { printf("결과: %d\n", add(2, 5));} 하나의 프로그램을 여러 개의 모듈로 나누어서 작성하는 것을 분할 컴파일이라고도 한다.분할 컴파일은 각 모듈을 개별적으로 작성해서 오브젝트 파일들로 만들고링크 단계에서 하나의 실행파일을 만든다. 모듈별로 구현하는 것은 협업에 있어서 작.. 2025. 1. 9.
[C/C++] const 키워드 const 키워드C 언어에서 const는 읽기 전용 변수로 만들어주는 예약어일 뿐완벽한 상수 기능을 갖도록 해주지 못했다.const int n; // 초기값 오류 없음char str[n]; // 배열의 요소 개수로 사용불가int* p = &n; // warning*p = 10; // 변경 가능  하지만 C++에서는 완벽히 상수화(化) 시켜주는 예약어로 사용된다. C++은 반드시 선언시 초기값을 선언하게 되었다.const int n = 10; // must be initializedchar str[n]; // 배열의 요소 개수로 사용 가능int* p = &n; // error (cannot convert from 'const int *' to 'int *’)const int* cp = &n;// *cp .. 2024. 12. 30.
[C/C++] #include "헤더파일" & #include <헤더파일> 전처리기란?전처리기는 컴파일 전에 지시어를 토대로 미리 정의한 것으로 치환해주는 것일반적으로 #include와 #define 가장 많이 사용#include는 파일처리 전처리문이고, #define은 형태 정의 전처리기문 📌 [전처리기] 매크로와 선행처리기 [C] [전처리기] 매크로와 선행처리기매크로와 선행처리기 실행파일이 컴파일과 링크의 과정을 거치는데 컴파일 이전에 선행처리 과정을 거친다. ▶ 선행처리 → 컴파일 → 오브젝트 파일 → 링크 → 실행 파일 ※ 컴파일 과정에 포zoosso.tistory.com #include헤더파일을 포함시켜 놓는 것(헤더파일이란 .h확장자를 가진 파일) 헤더파일을 따로 만들어서 include하는 이유는 자주 사용하는 함수들을 저장해놓고 사용하기 위함 예를 들어,#incl.. 2024. 12. 25.
[C/C++] 지역변수와 전역변수와 레지스터 변수 변수는 선언되는 위치에 따라서 크게 『전역변수』 와 『지역변수』 로 나뉜다.두 변수의 차이점은 메모리상에 존재하는 기간, 변수에 접근할 수 있는 범위 지역 변수중괄호{} 내에 선언되는 변수는 모두 지역변수다.즉, 선언된 지역 내에서만 유효 [예제 코드]지역변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.#include int SimpleFunc(void) { int num = 10; num++; printf("num = %d\n", num); return 0;}void main() { int num = 5; SimpleFunc(); printf("num = %d\n",.. 2024. 12. 22.
[C/C++] static 변수 static 변수- static 변수를 정적 변수라고 부릅니다.- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다.  하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것이기에 지역변수에 이용되는게 일반적.  지역변수에 static을 붙인 경우- 선언된 함수 내에서만 접근이 가능한 것은 계속해서 유효하다.- But, 해당 함수가 반환되면 소멸되지 않고, 처음 한번 초기화되고   프로그램 종료 시까지 메모리 공간에 존재한다.   즉, 한번만 초기화 되는 것입니다. (전역변순의 성격을 조금 띄게 됨)#include int simpleFunc() { static int x = 0; // 초기화하지 않으면 0으로 초기화 int y = 0; // 초기화하지 않으.. 2024. 12. 22.
[C/C++] [전처리기] #if #ifif - else문과 비슷한 구조를 가진다.다만 끝에 #endif 닫아주는 지시어가 존재한다.또한 조건문에 사용되는 소괄호와 동작 내용 부분의 중괄호가 존재하지 않는다. #include #define MODE 1#if MODE == 1char FILE_NAME[20] = "input.txt";#elif MODE == 2char FILE_NAME[20] = "sample.txt";#elsechar FILE_NAME[20] = "sample_input.txt";#endifint main() { freopen(FILE_NAME, "r", stdin);} Q) if문과 같이 조건에 따른 분기처리를 하는데 굳이 #if가 존재하는 이유는?A) 조건에 부합하지 않는 경우(false)인 경우 컴파일 자체가.. 2024. 7. 23.
[C/C++] 열거형 타입 enum 이란? enum 타입이란?#include enum Day { Sunday, Monday = 10, Tuesday, Wednesday, Thursday = 20, Friday, Saturday};int main(){ printf("Sunday : %d \n", Sunday); printf("Monday : %d \n", Monday); printf("Tuesday : %d \n", Tuesday); printf("Thursday : %d \n", Thursday); printf("Friday : %d \n", Friday);}- 초기값을 지정하지 않으면 첫번째 원소의 값 = 0- 중간에 초기값을 별도로 설정할 수 있다.  (나머지 원소도 그에 맞춰 .. 2024. 6. 6.
[C/C++] #ifdef, #if defined() 비교 및 활용 [전처리기] #ifdef에서 #ifdef 형태와 활용 방법을 다루었다. #define IMSI #ifdef IMSI #define MAX_SPEED 10 #else #define MAX_SPEED 100 #endif int speed; int main() { // 최고 속도이하로 수치조정 if (speed > MAX_SPEED) speed = MAX_SPEED; } [C] [전처리기] #ifdef #ifdef 사용되는 형태는 아래와 같다. #ifdef {NAME} ... #else ... #endif {NAME} 선언 여부에 따라 컴파일 되는 부분이 달라진다. #define에서 선언여부와 관계 있지 정의 여부와는 관계가 없다. #define TEST.. zoosso.tistory.com [예제 코드] #.. 2022. 9. 1.
[C 전처리기] #error 활용 예제 #error 지시문은 전처리 과정에서 개발자에게 제약 사항 위반을 알리는데 유용하다. 사용 형태는 아래처럼 정의되지 않을 때 Compile Error 되도록 한다. 복잡한(제약사항) 프로그램일 때 사용될 수 있다. #include #define ENGINE 0; void main() { #if ENGINE printf("Engine on.."); #else #error Engine Off.. #endif } 파일 구조가 단순하면 코드에서 빨간 밑줄을 바로 확인할 수 있다. 파일 구조가 복잡하더라도 빌드하면 오류 메시지를 확인할 수 있다. Compiler 종류나 버전 제약이 필요할 때도 활용 가능하다. 예를들어 c++ 아닌경우 error 처리할 수 있다. #if !defined(__cplusplus) #e.. 2022. 8. 11.
반응형