簡體   English   中英

最大標識符長度

[英]Max identifier length

在哪里可以找到C中的最大標識符長度?

哪個頭文件是指定的限制?

沒有頭文件包含標識符長度限制; 即使有,它怎么能幫到你? 無論如何,您無法在編譯時根據頭文件中的值更改標識符長度。

C標准 ,第5.2.4.1節說:

  • 內部標識符或宏名稱中的63個重要初始字符(每個通用字符名稱或擴展源字符被視為單個字符)
  • 外部標識符中的31個重要的初始字符(指定短標識符0000FFFF或更少的每個通用字符名稱被認為是6個字符,指定短標識符00010000或更多的每個通用字符名稱被認為是10個字符,並且每個擴展源字符被認為是與相應的通用字符名稱相同的字符數(如果有)

它還包含一個腳注:

實施應盡可能避免強制實施固定的翻譯限制。

因此,您應該檢查文檔,看看您的編譯器是否支持標識符中更多的重要字符。

沒有標題告訴你。 您必須根據您可能要移植的平台做出明智的決定。 Carl Norum指出了C99標准所說的內容。

曾幾何時,對於外部變量,您只能依賴6個唯一字符(單例) - 因為這是一些大型機環境提供的。 (這是C89標准所說的 - 但它注意到這種限制是痛苦的。)

這些天,部分原因是由於C ++中的類型安全鏈接,您可以合理地依賴外部符號的更長名稱。 如果你開始漂移超過31個字符,你可能會遇到問題 - 但你也遇到了可讀性問題。

簡而言之,沒有頭文件可以告訴您,這是ANSI / ISO C標准規范的一部分,它定義了C語言本身的語法和環境機制的布局。 在C89之前的標准中,最大標識符長度為6,因為大型機和* nix系統等系統的內存占用空間很小。

今天,最新的標准是C99標准,它規定標識符的最大長度為32,原因很簡單和邏輯......編譯器通過解析輸入流來作為命令行參數傳遞, makefile或解決方案(對於Microsoft Visual Studio環境),解析器是嚴格的並且是固定的,因此對標識符的長度施加了限制,以便解析器可以向前看並查看是否還有其他字符。 這是因為它的原因。

另一個原因是大多數C ++編譯器在標識符上使用名稱修改,正如Jonathan Leffler指出的那樣,可能會混淆編譯器以及代碼的鏈接。

由於存在一些奇怪的極端情況,使代碼知道限制是有幫助的,這里有一個方法可以放在一個(盡管看起來很丑陋)頭文件中:

#define SOMEREALLYREALLY...REALLYLONGNAME 1
#if SOMEREALLYREALLY
#define MAXIDENT 16
#elif SOMEREALLYREALLYR
#define MAXIDENT 17
#elif SOMEREALLYREALLYRE
#define MAXIDENT 18
...and so on

最終,#ifs將命中截斷的標識符,如果編譯器沒有截斷,則命中完整標識符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM