달력

1

« 2025/1 »

  • 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
  • 31
2010. 5. 14. 21:48

[7일차]전처리기 & 조건부 컴파일 Objective-C2010. 5. 14. 21:48

전처리기
1. #define
상수값에 심벌 명을 부여하는 구문
ex) #define 심벌값
      #define TRUE 1 -> TRUE 는 이제부터 1,
                                 1을 입력해야 하는 자리에 TRUE 입력가능

2. #import
1)뒤에 나오는 파일을 포함시켜 컴파일 하자는구문
"파일명" : 현재 프로젝트의 디렉토리에서 포함
<파일명> : 시스템 헤더파일디렉토리에서 포함
import 구문이 동일하게 여러번 작성되도 1번만 import 함

3. 조건부 컴파일
1)조건을 만족하는 경우에만 컴파일을 수행

  가)#ifdef,      매크로가 있으면 수행
      #endif,  종료
      #else,   매크로가 없으면 수행
      #ifndef
  나)#if 와 #elseif
      =>조건이 참일때만 컴파일
      #ifdef MAC_OS_X   // 이 매크로가 있으면
           #define DATADIR "/uxn1/data"
      #else
           #define DATADIR "\usr\data"
      #endif
------------------------------------------------
      #if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST)
          @class NSError;
          @class NSLocale;
          @class NSNSURL;
      #endif

    다) #undef : 매크로 삭제


배열(array)
동일한 크기를 사용하는 멤버들의 집합으로 연속해서 할당 됨.
cocoa에서는 배열을 추천하지 않음.
objective-C에서는 배열은 일반 Stack(변수)으로 취급됨.
메모리 할당이 없음
동적으로 할당할 수 없음. 한번할당하면 크기는 고정
동적할당을 위해서는 포인터를 사용해야 함. ex) int *p;
length 가 없음

  1. 선언
      자료형 배열명[크기];
      자료형 배열명[]={값을나열;}

  2. 사용
      배열명 : 배열의 시작주소
      배열명[인덱스]:요소

  3. 개수
     sizeof(배열명)/sizeof(배열명[0])    ==> sizeof 는 메모리 크기를 return

  4. 문자배열
      char 배열명[크기];
      char 배열명[] = {'H','E'}; => 2개, %s로는 출력할 수 없음(why? null이 없어서 값을 예측할 수 없음)
      char 배열명[] = "He"; =>3개 , 빈공간 하나가 더 있는것으로 인식, 빈공간(null)도 인식
      %c : 각 문자 출력
      %s : 주소부터 null을 만날때까지 byte 단위로 읽어서 출력

      char str1[]={'H','E'};
      char str2[]={'1','1','0'}; 
      NSLog(@"%s",str2); 는 출력하지 못함. %c 로 출력하거나 배열의 개수를 지정해서 출력해야 함.
------------------------------------------------
#import <foundation/foundation.h>

int main()

    int a=10;
   char word[] = {'H','e','1','1','0','!'};
   char message[] = "Hello!";
   int i;
   for(i=0; i<6; i++) // -> 좋지 않은 구문, 배열의경계를 숫자로 지정하는건 좋지 않다.
   for(i=0; i<sizeof(word); i++)  // sizeof(word[0])
   {
      NSLog(@"%c",word[i]); //문자 출력
   }
   NSLog(@"%s",word);
   NSLog(@"%s",message);
   NSLog(@"word의 사이즈 : %d",sizeof(word));
   NSLog(@"message의 사이즈 : %d",sizeof(message));
   system("pause");
   return 0 ;
}
------------------------------------------------

C언어 처럼 함수(전역함수)를 작성해서 사용해도 됨
------------------------------------------------
//test.h
#import <foundation/foundation.h>
//인스턴스는 자신의 맴버만을 호출할 수 있다. ?

//void printMessage()
//{
//   NSLog (@"C 언어의 함수");
//}
//int main()
//{
//   pintMessage();
//   system("pause");
//   return 0;
//}

void PrintMessage()
{
   NSLog(@"함수호출");   
}

@interface Test : NSObject
-(void) Disp;
@end
------------------------------------------------
//test.m
#import "test.h"

@implementation Test

-(void) Disp
{
   PrintMessage();  //내 클래스에 있던 NSObject에 있던 있어야 호출이 가능함.
}
@end
------------------------------------------------
//main.m
#import "test.h"

int main ()
{
   Test *obj = [Test new];
   [obj Disp];
   system("pause");
   return 0;
}


구조체(Struct)
1. 여러 멤버들을 하나로 묶을수 있는것
2. 멤버들의 사이즈가 달라도 됨
3. 인스턴스 멤버들은 실제로 구조체 형태로 저장됨.
   이때 NSObject 으로부터 상속받은 isa라는 멤버를 이용해서 접근제어등을 하게됨

@interface Test :NSObject
{
    int a;
    double b;
}
@end

   가) 선언
        Struct 구조체이름
        {
           자료형 멤버명;
           ..
        }
   나) 변수생성
        Struct 이름 변수명

   다) 멤버 접근
        . 을 이용해서 접근. 최우선 연산자이므로 조심해서 사용
         
       ->를 이용해서 접근(포인터 변수)


공용체(union)
1. 선언과 사용은 구조체와 거의 동일(예약어가 union)
2. union의 모든 멤버는 메모리를 공유
3. 멤버중 가장 큰 메모리 공간을 사용하는 멤버의 크기가 union의 크기

main 함수의 인수
ansi C 의 main함수원형
ex) int main(int argc, char * argv[])
          매개변수 개수            매개변수를 String으로 가지고 있음
argv[0] : 실행파일명
ex) ipconfig  -> ipconfig /all  : "/all"은 main 함수의 매개변수임
==> cmd 창에서 본인의 프로젝트가 있는 경로로 이동
==> 프로젝트명 매개변수 ... .. ..
------------------------------------------------
#import <foundation/foundation.h>


int main (int argc, char * argv[])
{
  
   NSLog(@"%s", argv[0]);
  
  
   NSLog(@"%s", argv[1]);
     
   system("pause");
   return 0;
}
------------------------------------------------

:
Posted by 에너지발전소