산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 전처리기와 매크로: #include, #define, 조건부 컴파일 마스터하기

C 전처리기와 매크로

C 전처리기의 힘을 탐구하세요: 헤더 포함, 상수/함수 정의, 조건부 지시문으로 컴파일 흐름 제어.

C 전처리기와 매크로: #include, #define, 조건부 컴파일 마스터하기

C 전처리기는 컴파일러보다 먼저 실행되어 매크로 확장, 헤더 파일 포함, 조건문 평가를 통해 소스 코드를 변환합니다. 유연하고 재사용 가능한 코드 작성에 필수적인 도구입니다.

모든 전처리기 지시문은 # 기호로 시작합니다. 예:

#define PI 3.14

헤더 파일 포함: #include

#include 지시문은 헤더 파일의 내용을 소스 파일에 직접 삽입합니다. 일반적인 사용:

#include <stdio.h>

#include <stdio.h> 없이는 printf(), scanf() 같은 함수가 정의되지 않습니다. 사용자 정의 헤더도 만들 수 있습니다:

#include "my_header.h"

사용자 정의 헤더는 관련 함수 선언과 상수를 그룹화하는 데 유용합니다.

상수와 표현식 정의: #define

매크로는 토큰이나 표현식을 컴파일 전에 값으로 치환합니다. 예:

#define c 299792458 /* 빛의 속도 */

프로그램 어디에서든 c를 사용하면 299792458로 확장됩니다.

예제 1: PI 정의

#include <stdio.h>
#define PI 3.1415
int main() {
    float radius, area;
    printf("반지름 입력: ");
    scanf("%f", &radius);
    area = PI * radius * radius;
    printf("Area=%.2f", area);
    return 0;
}

함수형 매크로

매크로는 인자를 받아 인라인 함수처럼 동작할 수 있습니다:

#define circleArea(r) (3.1415 * (r) * (r))

circleArea(5)는 전처리기에 의해 (3.1415 * 5 * 5)로 확장됩니다.

예제 2: 함수형 매크로 사용

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI * (r) * (r))
int main() {
    float radius, area;
    printf("반지름 입력: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);
    return 0;
}

조건부 컴파일

조건부 지시문은 if 문처럼 컴파일 타임에 코드 블록을 포함하거나 제외합니다.

주요 용도

핵심 지시문

#ifdef MACRO /* MACRO 정의 시 코드 */ #endif
#if EXPRESSION /* EXPRESSION이 0이 아닐 때 코드 */ #else /* EXPRESSION이 0일 때 코드 */ #endif
#if EXPRESSION /* 코드 */ #elif ANOTHER_EXPRESSION /* 대체 코드 */ #else /* 폴백 코드 */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* 버퍼가 충분히 큼 */ #endif

미리 정의된 매크로

매크로값
__DATE__현재 컴파일 날짜 문자열
__FILE__현재 파일 이름 문자열
__LINE__매크로가 나타나는 줄 번호
__STDC__ANSI C 표준 준수 시 0이 아님
__TIME__현재 컴파일 시간 문자열

예제 3: 컴파일 시간 표시

#include <stdio.h>
int main() {
    printf("Current time: %s", __TIME__);
    return 0;
}

출력 예:

Current time: 19:54:39

추천 읽기

C 언어

  1. 교류 회로에서 저항, 인덕터, 커패시터 종합 요약
  2. C# 키워드와 식별자 이해: 규칙, 목록, 모범 사례
  3. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  4. C# 추상 클래스와 추상 메서드: 실전 가이드
  5. C# partial 클래스와 partial 메서드 이해하기
  6. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  7. C# 전처리기 지시자 마스터하기: 실전 가이드
  8. C 키워드와 식별자: 실전 가이드
  9. C 상수와 리터럴: 정수, 실수, 문자, 문자열, 심볼릭 상수 정의법
  10. C 입출력(I/O) 마스터: 표준 스트림, 문자/행/포맷 입출력 함수 총정리