2010-02-28 151 views
8

我在哪裏可以找到C中最大標識符長度是多少?最大標識符長度

在哪個頭文件中指定了該限制?

+0

爲什麼你想使用這麼長的標識符這個問題呢? – Tronic 2010-02-28 19:12:02

+3

@Tronic,在C89中,外部標識符限制爲6個重要字符。 – 2010-02-28 19:21:57

回答

21

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

C standard,節5.2.4.1表示:在內部標識符或宏名稱

  • 63顯著初始字符(每個通用字符名或擴展源字符被認爲是一個單個字符)
  • 外部標識符中的31個有意義的初始字符(指定短標識符0000FFFF或更少的每個通用字符名稱被認爲是6個字符,指定短標識符00010000或更多的每個通用字符名稱被認爲是10個字符,並且每個擴展源字符是求索紅色相同的字符數與相應的通用字符的名字,如果有的話)

它還包含了一個註腳:

實現應該避免強加固定的翻譯限制只要有可能。

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

+0

哪個頭文件是指定的限制? – Devel 2010-02-28 19:03:12

+0

它不在頭文件中,它在你的編譯器文檔中。標識符在運行時消失。 – 2010-02-28 19:07:14

+0

@Devel,沒有這樣的事情。即使有,它會如何幫助你?你不能根據頭文件改變你的標識符長度,你能嗎? – 2010-02-28 19:07:24

8

沒有標題可以告訴你。您必須根據您可能要移植的平臺作出明智的決定。卡爾諾魯姆指出了C99標準所說的。

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

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

+0

對於只有6個字符的外部標識符的C89 +1。 – 2010-02-28 19:22:23

3

總之,沒有頭文件告訴你,這是ANSI/ISO C標準規範的一部分,它定義了C語言本身的語法和環境機制的佈局。在C89之前的標準中,由於諸如大型機和* nix系統等系統上的小內存佔用和環境,最大標識符長度爲6。

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

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

希望這會有所幫助, 最好的問候, 湯姆。