일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 선형 상수계수 미분방정식#lccode#sinusoidal input
- 멱급수법
- linespectra#feurierseries#푸리에 급수
- 계수내림법#reduction of order#wronskian#론스키안#아벨항등식#abel's identity
- 푸리에 급수
- 선형시스템연산자#라이프니츠 법칙#fundamental theorem of algebra#erf
- 상태천이행렬#적분인자법#미정계수법#케일리-헤밀톤 정리
- 미분방정식 #선형 미분방정식 #상미분 방정식
- 부분 분수분해
- 정규직교행렬
- 여인수 행렬
- 여인자
- 선형변환#contraction#expansions#shears#projections#reflection
- weighted least-squares
- reflection matrix
- 내적 공간#적분
- dirichlet
- 선형독립#기저벡터#선형확장#span#basis
- 직교행렬#정규직교행렬#orthonormal#reflection matrix#dcm
- 비제차#제차해#일반해#적분인자#적분인자법#homogeneous sol#nonhomogeneous sol#integrating factor
- 베르누이 미분방정식
- 2계미방#모드#mod#특성방정식#characteristic eq#제차해
- 오일러-코시 미방#계수내림법
- 푸리에 정리
- 그람-슈미트 과정#gram-schmidt process
- 최소자승#least-square#목적함수#양한정#정점조건#최소조건
- 추정문제#normal equation#직교방정식#정사영#정사영행렬#정사영 변환
- 가중 최소제곱법
- 변수분리#동차 미분방정식#완전 미분방정식
- 내적#duality#쌍대성#dot product
Archives
OnlyOne
Preprocessor 본문
본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.
Preprocessor
Intro
오늘은 전처리기와 매크로에 대해 다룬다.
전처리기를 통해 소스 프로그램을 쉽게 변경하고 다른 실행환경에서 컴파일을 쉽게 만들 수 있다. 컴파일 타임에 동작한다.
#include
복사 붙여넣기와 같다.
#include <stdio.h>
void print_a()
{
printf("a\n");
}
int main()
{
print_a();
}
#define
식별자 혹은 매크로를 정의할 때 사용된다.
참고로 식별자는 ALL_UPPER_SNAKE로 작성한다.
#include <stdio.h>
#define CODE 1
int main()
{
printf("define test: %d\n", CODE);
return 0;
}
컴파일 타임에서 식별자를 토큰으로 변경한다.
#include <stdio.h>
#define ARRAY_SIZE 10
int main()
{
int array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i = 0; i < ARRAY_SIZE; i++)
printf("array[%d]: %d\n", i, array[i]);
return 0;
}
매크로
#include <stdio.h>
#define MAX(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM1):(NUM2))
//매개변수 주변과 매크로 전체에는 무조건 소괄호를 넣어준다
int main()
{
int a = 1;
int b = 2;
printf("Max: %d\n", MAX(a, b));
return 0;
}
매크로는 간략하고, 구문 자체를 소스코드로 대체하기 때문에 빠르다는 장점이 있다. 하지만, 매개변수의 데이터 타입을 확인하지 않고, 코드가 여러줄인 경우 매크로를 만들 수도 없다. 코드를 대체하기 때문에 디버거에서 매크로를 지목하지 않는다.
따라서 매크로는 간단한 형태의 함수만을 대체하도록 한다.
매크로 예시
1. 단위 변환
#define _USE_MATH_DEFINES
#include <math.h>
#define DEG2RAD(X) ((X) * M_PI / 180.0)
#define RAD2DEG(X) ((X) * 180.0 * M_1_PI)
//Or
#define DEG2RAD (M_PI / 180.0)
#define RAD2DEG (180.0 * M_1_PI)
2. 최대/최소
#define MAX(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM1):(NUM2))
#define MIN(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM2):(NUM1))
3. 단순 반복
#define LOOP(X, NUM) for(register int X = 0; X < (NUM); X++)
4. 범위 제한
#define CLAMP(NUM, MAX, MIN) (((NUM) > (MAX))?(MAX):(((NUM) < (MIN))?(MIN):(NUM)))
#if/#ifdef#ifndef
식별자가 선언되어 있는지 선언되어 있지 않은지 확인하는 식별자이다.
#include <stdio.h>
#define CODE
int main()
{
#ifdef CODE
printf("Defined CODE\n");
#endif
#ifndef CODE
printf("Not defined CODE\n");
#endif
return 0;
}
'Control Engineering > C Programming' 카테고리의 다른 글
Memory&Pointer (0) | 2024.09.05 |
---|---|
Function&Array (0) | 2024.09.04 |
배열(Array) 기초 (0) | 2024.09.04 |
Practice[MAF] (1) | 2024.09.04 |
Practice[Integral] (0) | 2024.09.04 |