Đố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, enum
s đã đượ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 enum
là 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 #define
việ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 #define
khá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 const
từ 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 const
là 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ì const
sẽ 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ể.
const
nhận dạng là chữ thường và#defines
chữ 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! :)