왜 C11에서 못생긴 키워드입니까?


15

현재 C11 사양 의 초안 을 읽고 있습니다. 새로 도입 된 키워드 : _Bool, _Alignof, _Atomic모두와 같은 표준 예약 키워드 대신 맞춤 확장 프로그램 인 것 같습니다 struct, union, int.

나는 표준이 기본적으로 표준화 된 확장으로 구성되어 있음을 알고 있지만 여전히 끔찍합니다! 어쩌면 우리는 곧 __Long_Long_Reallylong_Integer_MSVC_2020_t표준에 들어온다!

비표준 코드의 이전 버전과의 호환성이 키워드의 새로운 스타일의 유일한 이유입니까?


2
아냐, 나는 그런 긴 타입에 대해 걱정하지 않을 것이다. _, az, AZ 및 0-9의 문자 수와 숫자 조합은 아마도 짧고 기억하기가 어렵다는 것을 의미합니다.
Neil

2
각 키워드에 대한 더 좋은 동의어는 종종 관련 표준 라이브러리 헤더 파일에 정의되어 있습니다. 예를 들어, C11 구현의 <stdbool.h>헤더 파일 에는와 같은 전 처리기 매크로가 포함되어야합니다 #define bool _Bool. 이것은 이전 버전과의 호환성을 유지하면서 깔끔한 솔루션이지만 새 헤더 파일을 포함하는 새 코드가 더 매력적인 구문을 사용할 수 있도록합니다.
andrew.punnett

답변:


20

완벽하게 표준 코드 와의 하위 호환성 이 더 중요한 이유라고 생각합니다.

이전 코드에서 합법적 인 식별자로 사용되었을 수있는 키워드를 추가하면 복잡한 구문 분석 규칙이있는 언어 인 C에서 미묘한 오류가 발생할 수 있습니다.

이러한 식별자가 어딘가에서 공용 인터페이스로 사용 된 경우 C를 전혀 사용하지 않지만 Ruby 또는 Python 등에서 라이브러리를 호출하는 불행한 라이브러리의 모든 사용자에게 고통을 가중시킵니다.

그렇기 때문에 새로운 키워드는 사람들이 이미 다른 목적으로 사용할 가능성이 적다는 멋진 단어처럼 보이지 않고 볼트로 해킹하는 것처럼 보입니다.


문제는 C ++이 아니라 C와 관련하여 중요하지 않다는 것이 지적되어야합니다. 귀하의 답변은 새로운 supoprted 유형의 이름 Bool이 부울로 인정되었지만 실제로는 C 표준의 일부가 아니기 때문에 레거시 코드 의 사용자 정의 유형과 충돌하는 것을 피하기 위해 이름이 지정된 이유를 다루 므로 가정이 안전하지 않습니다. 하다.
Ramhound

1
@Ramhound, IMHO bool는 C의 정신에 더 가깝습니다 . 또한 추악한 단어가 비표준 코드에서도 사용되었을 수 있으므로이 답변에 완전히 확신하지 못합니다. 단어의 스타일을 바꾸면 표준 단어를 한눈에 알아볼 수 없습니다.
Vorac

6
@Vorac : 문제는 bool언어에 무조건 추가 되면 자체 (완전히 합법적 인) 버전의 모든 프로젝트가 bool컴파일을 중단한다는 것입니다. 그것은 언어 개정의 수용을 심각하게 해칠 것입니다. 이것이 모든 새 식별자가 예약 세트에서 가져 오는 이유입니다 (따라서 시작 _[capital]). 또한 대한 큰 수요가 있었다으로 bool자체,이 추가되었습니다 typedef _Bool bool에서 <stdbool.h>.
Bart van Ingen Schenau

1
@BartvanIngenSchenau-사람들이 부울 값의 stdbool.h자신의 typedef를 안에 포함 된 것으로 바꾸 거나 자신의 typedef를 새 유형으로 업데이트하여 레거시 코드를 지원할 수 있습니다.
Ramhound

1
@Ramhound-새로운 C11 키워드와 충돌하는 변수를 가진 사람들도 "그래서 사용하지 않습니까?" 새로운 언어 표준과의 충돌을 막기 위해 컴파일 플래그 std = xxx가 있습니다.
스쿠터

8

밑줄과 대문자로 시작하는 이름 (및 이중 밑줄이있는 이름)은 이전 표준의 컴파일러 / 표준 라이브러리 구현을 위해 예약되었습니다.

에서 소유 식별자 C89과 C99의 :

또한 구현자는 밑줄로 시작하는 모든 외부 식별자와 밑줄로 시작하고 대문자 또는 밑줄로 시작하는 다른 모든 식별자를 예약합니다.

따라서 이론상으로,이 새로운 키워드는 이전에 작성된 코드에서 사용되어서는 안되며, 이는 단순한 이름보다 이전 버전과의 호환성이 향상되는 유일한 이유입니다.


4
다른 사람들이 귀하의 진술을 신속하게 확인할 수 있도록 적절한 표준 섹션을 인용하고 연결하거나 이름을 지정해야합니다. 이것은 당신의 대답을 향상시킬 것입니다.
SpaceTrucker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.