'Objective C/전처리기'에 해당되는 글 3건

  1. 2010.06.06 #import 명령문
  2. 2010.06.06 #연산자와 ##연산자
  3. 2010.06.06 #define 명령문
Objective C/전처리기2010. 6. 6. 16:58
첫째로 임포트 명령문은 내가 구현하고자 하는 클래스를 불러와 삽입하게 된다. 따라서 저 명령문이 설정된 곳에 해당하는 클래스의 코드가 삽입되어 하나의 거대한 파일로 컴파일러는 분석하고 컴파일하게 된다. 당연히 클래스 분산과 메서드 분산은 이루어 져야 하며 여러가지 패턴을 구사할 수 있게된다. 이것이 가능하게 된것은 오로지 이 #import덕에 분산처리가 가능한 것이다.

둘째로 앞서 정의한 매크로들 또한 임포트할 수 있다. 따라서 오랜동안 개발을 한 사람이라면 자신만의 라이브러리를 만들어 사용하듯이 자신만의 매크로들을 불러와 편하게 사용할 수도 있다.
Posted by 버터백통
Objective C/전처리기2010. 6. 6. 16:52
전처리기 단계에서 #연산자를 사용하면 C스타일의 문자열을 생성한다. 가령 10이라는 정수를 # 10 으로 하게되면 문자열 '10'으로 변환되며 이를 활용 할 수 있다.

#import <Foundation/Foundation.h>


#define printint(var) printf(# var " = %i \n" , var) 


int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

//숫자를 입력 숫자의 값을 C스타일 문자열로 선언 출력 입력된 값을 %i 출력

printint( 100 );

-> 100 = 100으로 출력하게 된다.


[pool drain];

    return 0;

}                 



##연산자는 매크로 정의에서 두개의 토큰을 합치는 데 사용한다. 따라서 전처리기의 단계에서 num1, num2, num3 ...과 같은 공통문자열이 되는 변수 값이 있다고 할 때 토큰그룹 1을 num이라고 하고 토큰 그룹2를 뒤에 오는 숫자라고 할 때 이 둘을 조합하여 필요한 변수의 값에 접근할 수 있다. num ## 1은 num1을 의미하는 것이고 num ## 2는 변수 num2를 지칭하는 것이다.


#define printStrX01( n ) printf( "%i \n" , x ## n) 

위의 코드는 x1~n의 변수로 접근하여 그 값을 출력하는 매트로이다.

Posted by 버터백통
Objective C/전처리기2010. 6. 6. 16:42
컴파일러가 프로그램 코드를 분석하기 전에 처리한다. 그리고 실행 방식은 한마디로 매크로라고 할 수 있다. 흔히 변수와 값등을 설정하여 사용하기도 하지만 자주 사용하는 명령문등을 만들어 놓고 해당 파일을 임포트하여 사용할 수 도 있다. 간단히 매크로 정의라고 생각하면 편할 것이다.

#import <Foundation/Foundation.h>


#define EqualValue(x , y) if(x == y){ NSLog(@"같다"); }else{NSLog(@"다르다");} 


#define PrintNumber( value ) NSLog(@"%i", value)

#define PrintText( value ) NSLog(@"%@", value)


int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

EqualValue(10 , 10);->같다를 출력

EqualValue(10 , 100);->다르다를 출력

PrintNumber(400);

PrintText(@"가나다라마바사");

[pool drain];

    return 0;

}


위의 코드는 비교문과 정수값과 문자열을 프린트하는 매크로를 정의한 것이다.
Posted by 버터백통