대문자로 된 상수의 이름은 무엇입니까?


20

모든 대문자의 상수 명명 규칙에 대한 역사는 무엇입니까?

내 직감은 C 전 처리기에서 시작하여 사람들이 전 처리기 매크로의 이름을 대문자로 지정하여 실제로 별도의 네임 스페이스에 살고 이름 충돌을 피할 수있는 방법을 개발했다는 ​​것입니다. 내 생각 에이 관행은 비 전 처리기 상수 ( enums, const변수) 에도 적용되도록 오해되고 개자식이 있다고 생각 합니다.

모든 대문자의 전 처리기 매크로 이름을 지정하면 나에게 정말 유용한 것 같습니다. 일반적인 상수의 이름을 그렇게 많이 지정하지 마십시오 (매크로 이름과 충돌을 일으키는 경우 비생산적입니다).

나는 기지에서 떨어져 있습니까? 상수 상수의 관행이 C보다 먼저 사용 되었습니까?


3
당신이 여기 있다고 생각합니다. 초기 언어는 대문자로 거의 모든 것이 있었으며 소문자 사용은 나중에 유행이되었습니다. 초기 C 책은 일반적으로 const식별자가 소문자와 #defines대문자로 표시 되는 것으로 보입니다 . Java는 상수 및 다른 언어에 대문자를 채택했지만 그 마지막 부분이 잘못되었을 수 있습니다. 더 많은 연구가 필요했습니다! :)
David Arno

C 또는 어셈블러의 특성으로 인해 @DavidArno와 동의합니다.
스눕

답변:


13

C 의 경우 C 프로그래밍 언어 (일명 K & R) 의 첫 번째 버전에서는 전 처리기 매크로에 대한 직감이 정확하다고 제안합니다.

기호 상수 이름은 일반적으로 대문자로 작성되므로 소문자 변수 이름과 쉽게 구별 할 수 있습니다.

여러 가지면에서, 이것은 어셈블리 언어와는 별개로, 매크로는 레이블, opcode, 레지스터 이름 및 기타 모든 요소와 함께 대문자로 정의되었습니다. AT & T 스타일 어셈블리의 출현은 일부 플랫폼에서 바뀌었지만 소문자를 지원하는 터미널이 문제가되고 Unix가 내가 "소문자 운영 체제"라고 부르는 데 크게 영향을 받았다고 생각합니다.

다른 두 지점에서 .500을 타격합니다.

열거 형

제 2 판이 출판 enum될 때, 그것들은 정의되었고, 열거 상수 로 불 렸으며 상수 섹션에서 다루었 다. 에 의해 정의 된 상수 enum는 기호로 표시되므로 기호 상수를 사용하므로 권장되는 규칙을 따르는 경우 대문자로 이름을 지정해야합니다. (전 처리기 매크로와 마찬가지로 다른 방법으로는 아무것도하지 않습니다.)

여기에서 뒤 따르는 일부 언어와 달리 C는 enum유형 자체가 고유 한 열거 형 값이 각 유형에 고유하며 다른 유형에서 재사용 될 수있는 1 급 클래스로 취급하지 않습니다 . 대신 #define식별자가 첨부 된 정수 시퀀스를 생성 하는 것이 편리합니다 . 이것은 만든다

enum foo  { BAR, BAZ };
enum quux { BLETCH, BAZ };

모든 기호가 범위를 공유하고 BAZ재정의되어 유효하지 않습니다 . (이것은 전처리기에 비해 개선 된 것으로, 당시에는 하나의 #define클로버 에 대해 경고하지 않았습니다 .) 또한 C는 모두 정수이기 때문에 혼합 여부를 신경 쓰지 않습니다.

enum foo  { BAR, BAZ };
enum quux { BLETCH, BLRFL };

enum foo variable = BLETCH;

모든 경고가 설정된 최신 컴파일러에서도 완전히 유효합니다.

콘 스트

주의 : const키워드는 1981 년 Stroustrup의 C With Classes (C ++로 발전)에서 시작되었고 결국 C에 의해 채택되었습니다. 이름의 선택은 K & R의 상수 라는 용어와 충돌하여 현재 우리가 무엇을 부를 것인지를 의미 하기 때문에 불행 합니다. 문자 (예를 들어 38, 'x'또는 "squabble"). 두 번째 버전의 텍스트는이를 반영하기 위해 다시 작성되지 않았습니다.

선언 된 const변수는 여전히 변수이므로 다른 이야기입니다. 그것들은 수정되지 않아야하지만 상수 변수의 개념이 점보 새우가 다른 토론을위한 사료보다 더 의미가 있는지 여부입니다. 어떤 경우이든 C는 표준을 변경하려고 할 때 컴파일러가 진단을 내도록 요구하기 때문에 C는 그것에 대해 진지하게 생각하지 않았습니다. 수정이 컴파일되고 실행될 경우 실제 동작은 정의되지 않습니다.

변수이기 때문에 모든 const것이 소문자로 명명되는 규칙을 따르는 것이 합리적입니다 . 리터럴을 표현하기 위해 그것들을 사용하면 몇 가지 유형의 안전 이점이 있지만 값을 얻기 위해 컴파일 단위간에 도달 해야하는 경우 좋은 최적화를하지 못합니다.

그것들이 아닌 것은 K & R 의미에서 상수이며, 이런 이유로 그들의 식별자는 대문자가되어서는 안됩니다. 어떤 사람들은 그것들을 그런 식으로 사용하지만 몇 가지 특별한 경우를 제외하고는 내가 권장하지 않습니다.


나는 이것을 받아 들일 것입니다. 나는 대답을 고맙게 생각하지만 enum일류 유형이 아니며 재정의 충돌에 관한 단락은 관련이없는 것으로 보입니다. K & R의 첫 번째 판은 "기호 상수"에 대한 관행으로 충분하다고 설명했습니다. (또한, K & R의 두 번째 판 사본을 확인한 후, 모든 예제의 이름 enum이 모두 대문자로 표시되므로 답을 더 확인할 수 있습니다.)
jamesdlin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.