2011-03-05 6 views

답변

13
#define NUMBER 10 

전처리 기 (컴파일 중)에서 실행할 문자열 교체를 만듭니다.

float number = 10; 

는 이진의 데이터 세그먼트에 float를 만들고 (10) 즉, 그것을 초기화합니다 그것은 주소를 가지며 변경할 수 있습니다. 그래서

float a = NUMBER; 

를 작성

메모리 액세스를 만들 것이다

float a = number; 

를 쓰는 반면

float a = 10; 

를 쓰는 것과 같은 것이다.

+0

그것은 또한 주목해야한다 퍼팅'떠 A = 10;'(또는 무엇이든) 헤더 파일 내에서 가능성이 링크 할 때 심볼 오류가 중복 될 것이다

는이 질문 허용 대답을 참조하십시오. 그러나'# define '을 사용하는 것은 불가능합니다. – trojanfoe

0

"#DEFINE는"실제로 프로그램을 시작하고 전체 프로그램에 대한 유효하기 전에 실행되는 전처리 매크로입니다

플로트 프로그램/블록 내부에 정의 된 데이터 유형이 만 프로그램 내에서 유효/블록.

+1

"프로그램이 시작되기 전에"는 컴파일되기 전의 의미입니다. –

4

Philipp이 말한 것처럼 #define 양식은 컴파일하기 전의 전처리 단계에서 코드에 대체 코드를 생성합니다. #definenumber과 같은 변수가 아니기 때문에 컴파일 타임에 실행 파일에 하드 정의가 적용됩니다. 이것은 당신이 repesenting하는 것이 실행 시간에 어딘가에서 계산되거나 읽혀질 필요가없고 실행 중에 변경되지 않는 진정한 상수라면 바람직합니다.

#defines은 코드를 읽기 쉽도록 만드는 데 매우 유용합니다. 당신은 물리학 계산을하고 있던 가정 해 - 오히려 당신의 코드에 0.98f를 plonking보다 사방이 중력 가속도 상수를 사용해야합니다, 당신은 단지 한 곳에서 정의 할 수 있으며 코드의 가독성 증가 :

#define GRAV_CONSTANT 0.98f 

... 

float finalVelocity = beginVelocity + GRAV_CONSTANT * time; 

을 편집 돌아와서 내 대답을 발견하고 난 왜 #define을 사용하면 안되는지 언급 놀랐습니다.

일반적으로 #define을 피하고 #define에는 범위가없고 유형이 IDE와 컴파일러 모두에 유용하기 때문에 실제 유형 인 상수를 사용하려고합니다. What is the best way to create constants in Objective-C

관련 문제