2016-11-19 1 views
1

자바의 배경에서 오는 C 언어를 배우기 시작했습니다 & 자바 스크립트 및 다음과 같은 기술적 인 이유가 나쁜 실행으로 간주되는지 아니면 언어가 진화했는지 궁금합니다. 모든 곳C에서 소문자 매크로 정의를 사용하지 않는 기술적 인 이유가 있습니까?

#define bool char 
#define false 0 
#define true 1 
#define null NULL 

I (즉, 올바른 단어 인 경우에) 항상 대문자로 정의 된 변수를 참조보고이 규칙에 대한 좋은 기술적 인 이유가 있는지 궁금하네요? 나는 이것이 여러 번 질문 받았음에 틀림 없다고 확신하지만 대답을 찾지 못하는 것 같습니다.

+0

표준에 대한 이유가 없으면 의견을 기반으로 한 것인지, 아니면 대회의 기술적 이유가 있는지를 묻는 것입니다. 또한 나는 bool이 사실 표준 C 타입이 아니라는 인상을 받고 있었습니까? – SMC

+1

@iharob bool은 매크로입니다. – 2501

+0

@iharob 아니요, bool은 _Bool로 정의됩니다. – 2501

답변

6

매크로라고합니다. 그리고 네, 관습에 따라 일반 식별자와의 충돌을 피하기 위해 ALL_UPPERCASE입니다.이 식별자는 텍스트 대체 일 뿐이므로 언어의 일반적인 범위 지정 규칙을 따르지 않습니다.

#define foo bar 
... 
int foo, bar; // error: preprocessing turns this into int bar, bar; 

, 우리는 서로 다른 매크로를 유지하려고이 (가처럼 보이는없는 코드) 같은 놀라움을 방지하려면 :

는 다음과 같은 고려하십시오.

+0

답변 해 주셔서 감사 합니다만, NULL이 전체 C 언어의 유일한 대문자 특정 문자열입니까? – SMC

+1

@ LinuxN00b 일반적으로 매크로이기도합니다. –

+0

@ LinuxN00b 나는 그 질문을 이해하지 못한다. 표준 라이브러리는 여러 매크로를 제공합니다. 'NULL'은 그들 중 하나입니다. – melpomene

1

그것의 소문자 정의 언어가 같은 것으로 간주됩니다을 개혁 (공통 규칙에 대해이있는 경우에도)보다는 나쁜 없습니다 :

#define null NULL 

유지 보수 프로그래머를 혼란스럽게하려고하는이 방법은, 누가 null 포인터 상수를 지정하는 관용적 방법으로 NULL을 기대하고있다.

관련 문제