Lịch sử để đặt tên hằng trong tất cả chữ hoa là gì?


20

Lịch sử đằng sau quy ước đặt tên hằng trong tất cả chữ hoa là gì?

Trực giác của tôi là nó bắt đầu với bộ tiền xử lý C, nơi mọi người đã phát triển một thực tiễn để đặt tên cho các macro tiền xử lý trong tất cả các chữ hoa để chúng có hiệu quả sống trong một không gian tên riêng biệt và tránh xung đột tên. Tôi tin rằng thực tế này sau đó đã bị hiểu lầm và bastardized để áp dụng cho các hằng số không tiền xử lý quá ( enums, constbiến).

Đặt tên macro tiền xử lý trong tất cả chữ hoa dường như thực sự hữu ích với tôi. Đặt tên hằng số chung theo cách đó, không quá nhiều (và phản tác dụng nếu nó tạo ra xung đột với tên macro).

Tôi ra khỏi căn cứ à? Có phải thực tế viết hoa hằng trước C?


3
Tôi nghĩ bạn ở ngay đây. Ngôn ngữ ban đầu có khá nhiều thứ ở dạng chữ hoa, với việc sử dụng chữ thường trở thành mốt sau này. Sách C sớm dường như thường hiển thị số constnhận dạng là chữ thường và #defineschữ hoa. Java mặc dù đã áp dụng chữ hoa cho các hằng số và các ngôn ngữ khác theo sau, nhưng tôi có thể có chút sai lầm cuối cùng. Cần nhiều nghiên cứu hơn! :)
David Arno

Tôi đồng tình với @DavidArno có lẽ vì bản chất của C hoặc trình biên dịch.
Snoop

Câu trả lời:


13

Đối với C, phiên bản đầu tiên của Ngôn ngữ lập trình C (còn gọi là K & R) cho thấy rằng trực giác của bạn về các macro tiền xử lý là chính xác:

Tên hằng số tượng trưng thường được viết bằng chữ in hoa để có thể dễ dàng phân biệt với tên biến chữ thường.

Theo nhiều cách, đây là một sự tiếp quản từ ngôn ngữ lắp ráp, trong đó các macro được định nghĩa bằng chữ in hoa cùng với nhãn, opcodes, tên đăng ký và mọi thứ khác. Sự ra đời của lắp ráp kiểu AT & T đã thay đổi điều đó trên một số nền tảng, nhưng tôi nghĩ nó bị ảnh hưởng nặng nề bởi thực tế là các thiết bị đầu cuối hỗ trợ chữ thường đang trở thành một thứ và Unix là cái mà tôi gọi là "hệ điều hành chữ thường".

Ở hai điểm khác, bạn đang đánh .500:

Enum

Vào thời điểm ấn bản thứ hai được xuất bản, enums đã được xác định, chúng được gọi là hằng số liệt kê và được đề cập trong phần về hằng số. Bởi vì các hằng số được xác định bởi một enumđược biểu thị bằng các ký hiệu, điều đó làm cho chúng là các hằng số tượng trưng, ​​mà nếu bạn tuân theo quy ước được đề xuất, nên được đặt tên bằng chữ in hoa. (Giống như các macro tiền xử lý, không có gì ngăn bạn làm khác.)

Hàm ý ở đây là không giống như một số ngôn ngữ tiếp theo, C không coi enumlà loại lớp đầu tiên mà bản thân các loại là khác biệt, các giá trị liệt kê cụ thể cho từng loại và có thể được sử dụng lại trong các loại khác. Thay vào đó, nó thực sự là một tốc ký thuận tiện cho #defineviệc tạo ra các chuỗi số nguyên có mã định danh kèm theo. Điều này làm cho

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

không hợp lệ vì tất cả các biểu tượng chia sẻ phạm vi và BAZđược xác định lại. (Đây là một cải tiến so với bộ tiền xử lý, vào thời điểm đó, đã không cảnh báo về việc một bộ phận #definekhác bị chặn.) Hơn nữa, C không quan tâm liệu bạn có trộn chúng hay không bởi vì tất cả chúng chỉ là số nguyên, tạo ra

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

enum foo variable = BLETCH;

hoàn toàn hợp lệ ngay cả trên một trình biên dịch hiện đại với tất cả các cảnh báo được bật.

hăng sô

NB: Các consttừ khóa có nguồn gốc vào năm 1981 với C Stroustrup của Với lớp (trong đó phát triển thành C ++) và cuối cùng đã được thông qua bởi C. Việc lựa chọn tên là đáng tiếc, bởi vì nó va chạm với K & R của sử dụng thuật ngữ liên tục để có nghĩa là những gì chúng ta bây giờ sẽ gọi một nghĩa đen (ví dụ 38, 'x'hoặc "squabble"). Văn bản trong phiên bản thứ hai không được viết lại để phản ánh điều đó.

Các biến được khai báo constlà một câu chuyện khác nhau bởi vì chúng vẫn là các biến. Chúng không nên được sửa đổi, nhưng liệu khái niệm về một biến không đổi có ý nghĩa gì hơn là, tôm jumbo là thức ăn cho một cuộc thảo luận khác. Dù thế nào đi nữa, C không bao giờ thực sự nghiêm túc về điều đó vì tiêu chuẩn chỉ yêu cầu trình biên dịch phát ra chẩn đoán khi bạn cố gắng thay đổi. Hành vi thực tế không được xác định nếu một sửa đổi được biên dịch và thực hiện.

Là các biến, nó có ý nghĩa rằng bất cứ điều gì constsẽ theo quy ước được đặt tên bằng chữ thường. Sử dụng chúng để thể hiện nghĩa đen có một số lợi thế an toàn loại nhưng không giúp tối ưu hóa tốt nếu bạn phải tiếp cận giữa các đơn vị biên dịch để có được giá trị.

Những gì họ không phải là hằng số theo nghĩa K & R, và vì lý do đó, định danh của họ không nên viết hoa. Một số người sử dụng chúng theo cách đó, nhưng đó không phải là cách tôi khuyên dùng trừ một vài trường hợp cụ thể.


Tôi sẽ chấp nhận điều này và trong khi tôi đánh giá cao câu trả lời, các enumđoạn về việc không phải là loại hạng nhất và về các xung đột xác định lại dường như không liên quan. Phiên bản đầu tiên của K & R mô tả thực tiễn dành cho "hằng số tượng trưng" là đủ. (Ngoài ra, sau khi kiểm tra bản sao của tôi của các ấn bản thứ hai của K & R, tôi thấy rằng ví dụ của họ tất cả các tên enumhằng trong tất cả các chữ hoa, để xác nhận thêm câu trả lời của bạn.)
jamesdlin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.