몽상실현개발주의

[따배씨] 16.7 조건에 따라 다르게 컴파일하기 본문

Language/C

[따배씨] 16.7 조건에 따라 다르게 컴파일하기

migrationArc 2021. 8. 22. 22:42

[따배씨] 16.7 조건에 따라 다르게 컴파일하기

따배씨 - 따라하며 배우는 C언어

16강 전처리기와 라이브러리

16.7 조건에 따라 다르게 컴파일하기 Conditional Compilation

 

#include <stdio.h>

/*
    #define, #undef, #if, #ifdef, #ifndef, #else, #elif, #endif
 */

/*
    #undef
 */

#define LIMIT 400
//#undef LIMIT // It's ok to undefine previously NOT defined macro.

#undef  NON_DEFINED

int main()
{
    printf("%d\n", LIMIT);
    
    return 0;
}
#undef  NON_DEFINED
  • NON_DEFINED 를 define 해주지 않았지만, 문제 없음

 

 

// my_function_1.h
#ifndef MY_FUNCTION_1
#define MY_FUNCTION_1

#include <stdio.h>

static void my_function()
{
    printf("my_function_1.h\n");
}
#endif


// main.c
#include <stdio.h>

#define TYPE 1

#if TYPE == 1
#include "my_function_1.h"
#elif TYPE == 2
#include "my_function_2.h"
#else
static void my_function()
{
    printf("Wrong complie option!\n");
}
#endif


int main()
{
    my_function();
    
    return 0;
}
  • TYPE 조건에 따라 다른 header 를 include 하여 compile

 

 

#include <stdio.h>

#define REPORT  // empty Macro

int sum(int i, int j)
{
    int s = 0;
    for (int k = i; k <= j; k++)
    {
        s += k;
    
#ifdef REPORT
    printf("%d %d\n", s, k);
#endif
    }
    
    return s;
}


int main()
{
    printf("\n%d \n", sum(1, 10));
    
    return 0;
}
#define REPORT
  • REPORT 는 Macro 이름만 선언 된, empty Macro
#ifdef REPORT
    printf("%d %d\n", s, k);
#endif
  • REPORT 가 macro 로 선언 되어 있는지 여부에 따라 판단

 

  • 개발 환경의 Mode (RELEASE , DEBUG) 에 따라 전처리기가 다른 결과를 보여주도록 개발 가능
    • DEBUG Mode 는 전처리 지시자에서 DEBUG 명령이 들어가게 됨

 

 

#include <stdio.h>

void say_hello()
{
#ifdef _WIN64
    printf("Hello, WIN64");
#elif _WIN32
    printf("Hello, WIN32");
#elif __linux__
    printf("Hello, linux");
#elif __APPLE__
    printf("Hello, APPle");
#endif
}

int main()
{
    say_hello();
    
    return 0;
}
  • 플랫폼에 따라 코드의 일부를 바꾸어 Complie 가능
  • 플랫폼에 대한 정의는 Complier 가 미리 정의를 해서 넣어둠

 

#ifdef == #if defined(조건)
  • 같은 표현

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

 

 

Comments