Objective-C의 Preprocessor(전처리기)는 텍스트 대치 도구이고,
컴파일러가 실제 컴파일 이전에 요구되는 전처리를 할 수 있도록 한다.(텍스트 삽입, 대치 등)
모든 전처리 명령은 #으로 시작한다. 공백이 아닌 글자로 시작하고 주로 한 줄에 다 작성한다.
매크로란? 코드에서 자주 사용되는 일정한 패턴이나 값을 하나의 이름으로 정의해 반복적인 코딩 작업을 줄여주는 기능
#define
매크로 상수 정의
MAX_LENGTH를 20으로 대치할 것을 명령한다
#define MAX_LENGTH 20
#import
전처리기에게 Foundation 프레임워크로부터 foundation.h를 가져오라고 명령한 후
현재 소스 파일에 텍스트를 추가하게 한다.
#import <Foundation/Foundation.h>
#include
로컬 디렉토리에서 헤더파일을 불러와 현재 소스에 추가할 것을 명령
#include "myHeader.h"
#undef
현재 매크로를 해제하고, 재정의
#undef FILE_SIZE
#define FILE_SIZE 42
#ifndef
매크로가 이미 정의되어 있지 않은 경우에만 정의
#ifndef MYMESSAGE
#define MYMESSAGE "RAINS"
#endif
#ifdef
매크로가 정의되어 있다면 수행할 것 (디버깅 모드에서만 수행할 것 작성)
void debugLog(NSString *logMessage) {
#ifdef DEBUG
/* debugging */
NSLog(@"It's debugging mode!");
#endif
}
predefined Macros
사전정의 매크로
ANSI (American National Standars Institue) 표준 C에서는 미리 정의된 매크로가 제공된다.
NSLog(@"File : %s\n", __FILE__); //파일경로
NSLog(@"Date : %s\n", __DATE__); //현재 날짜
NSLog(@"Time : %s\n", __TIME__); //현재 시간
NSLog(@"Line : %d\n", __LINE__); //현재 코드라인
NSLog(@"ANSI : %d\n", __STDC__); //ANSI 표준으로 컴파일 하면 1
Preprocessor Operators
전처리 연산자(#)
매크로 정의에서 #은 파라미터를 문자열 상수로 바꿔준다.
#define message_for(a,b) \
NSLog(@#a " and " #b ": WE LIKE APPLE!\n")
Token Pasting(##)
#define tokenpaster(N) NSLog (@"token" #N " = %d", token##N)
//NSLog(@"tokenN = %d",tokenN);으로 처리된다.
defined
defined연산자는 상수 표현식에서 식별자가 정의되어 있는 경우 1, 아니면 0이 된다.
#if !defined(MYMESSAGE)
#define MYMESSAGE = "NEW MESSAGE"
#endif
Parameterized Macros
인자를 받아들이는 매크로로 함수처럼 동작한다. 컴파일 시점에 인자를 전달받아 텍스트 치환이 된다.
의도치 않은 동작을 방지하기 위해 파라미터를 소괄호로 감싸주자.
#define square(x) ((x) * (x))
#define MAX(a,b) ((a) > (b) ? (a) : (b))
'iOS Developer > Objective-C' 카테고리의 다른 글
16. Objective-C 로그/에러 핸들링, 포인터 (0) | 2024.05.17 |
---|---|
15. Objective-C typedef, type casting (0) | 2024.05.17 |
13. Objective-C Structure 구조체 (0) | 2024.05.16 |
12. Objective-C Strings 문자열 (0) | 2024.05.13 |
11. Objective-C Pointers 포인터 (0) | 2024.05.09 |