2013-01-16 1 views
-4

가능한 복제를 사용하는 것이 좋습니다 :
“static const” vs “#define” in CC/C++ - 그것은 const를 정적 또는 #DEFINE

내 첫번째 생각이 함축되어 있지만 혹시 이유가 #define 대신 const을 사용해야하는 이유는 무엇입니까?

전역 변수를 설정 한 경우 왜 변경하고 싶습니까? 또한이를 전역 적으로 보호하고 싶지 않으십니까?

+3

요청한 정의의 예를 들려 줄 수 있습니까? –

+1

"#define과 함께 const 사용"이란 무엇을 의미합니까? – juanchopanza

+2

"#define 대신 const를 사용하는 이유"는 잘못된 질문입니다. "왜 const 대신 #define을 사용합니까?" 대답은 "전혀 이유가 없다"입니다. –

답변

5

헌장은 일반적으로 #define

#define텍스트 교체를 할 수있는 전처리 매크로입니다 대체합니다. 상수 또는 매크로를 정의하거나 다른 모든 일을 할 때 사용할 수 있습니다.

CONST는 컴파일 과정에서 서로 다른 시간에

이 두 가지 메커니즘이 발생 일정한 컴파일 시간을 정의하는 형식 안전한 방법이지만, 일반적으로, CONST는 #define의 문제를 해결하기 위해 만들어졌습니다.

나는 거의 본 적이 한 사람들은

#define CONSTINT const int 

그런 짓을하지만 합법적이다.

4

const은 서브 루틴이 변경할 수 없도록 런타임에 전달되는 변수에만 관련이 있습니다. #define은 정의한 내용을 사용자가 정의한 것으로 바꾸는 선행 처리 컴파일 타임 명령입니다. 그러므로, 그들은 다른 목적을위한 것입니다. 당신은 ... 정말 지금 당신이 다른 무언가를 요구하는 질문을 편집 한 이해가되지 않는 defineconst을 사용할 것인지의

2

편집이, 원래의 질문에 대한 답변입니다.

#define 변수를 정의하지 않으므로 어쨌든 변경할 수 없으므로 질문에 의미가 없습니다. 전처리 교체 99의 매크로 FOO 대체

#define FOO 99 

int main() 
{ 
    FOO = 98; 
} 

때문에, 그래서 컴파일러는이 코드를보고 :

이조차 할 수 없습니다

int main() 
{ 
    99 = 98; 
} 

그리고 분명 그 넌센스입니다. 당신은 리터럴에 할당 할 수 없습니다, 변수가 아닙니다 (const 또는 not) 그것은 단지 값입니다.