- 1. 規則
- 1.1 原文
- 1.2 分類
- 2. 關鍵描述
- 3. 代碼實例
1. 規則
1.1 原文
Rule 5.1 External identifiers shall be distinct
Category Required
Analysis Decidable, System
Applies to C90, C99
1.2 分類
規則5.1:外部標識符應該是不同的
Required必須類規范。
2. 關鍵描述
該規則要求不同的外部標識符在實現所施加的限制內是不同的。
distinct的定義取決于正在使用的C語言的實現和版本:
?在C90中,最低要求是外部標識符的前6個字符是重要的,但它們的大小寫不需要是重要的;
?在C99中,最低要求是外部標識符的前31個字符是有效的,每個通用字符或相應的擴展源字符占用6到10個字符。
在實踐中,許多實現提供了更大的限制。例如,C90中的外部標識符通常是區分大小寫的,并且至少前31個字符是有效的
如果兩個標識符僅在非重要字符上不同,則行為未定義。如果考慮可移植性,則使用標準中指定的最小限制來應用此規則將是謹慎的。長標識符可能會損害代碼的可讀性。雖然許多自動代碼生成系統會生成較長的標識符,但將標識符長度保持在遠低于此限制的水平是有充分理由的。注意:在C99中,如果擴展源字符出現在外部標識符中,并且該字符沒有對應的通用字符,則標準沒有指定它占用多少字符。
3. 代碼實例
例1,規范中例程:
在下面的示例中,所有定義都出現在同一個翻譯單元中。所討論的實現在外部標識符中支持31個重要的區分大小寫的字符
/* 1234567890123456789012345678901********* Characters */
int32_t engine_exhaust_gas_temperature_raw;
int32_t engine_exhaust_gas_temperature_scaled; /* Non-compliant */
/* 1234567890123456789012345678901********* Characters */
int32_t engine_exhaust_gas_temp_raw;
int32_t engine_exhaust_gas_temp_scaled; /* Compliant */
例2,
在下面的不兼容示例中,該實現在外部標識符中支持6個不區分大小寫的重要字符。兩個翻譯單元中的標識符不同,但其有效字符并不明顯
/* file1.c */
int32_t abc = 0;
/* file2.c */
int32_t ABC = 0;