2017-01-16 64 views
0

您可以在C中使用的變量/標識符的最大數量是多少?學習編譯器理論和解釋器設計,我已經瞭解到,標識符及其值通過符號字典/散列映射存儲。,您可以擁有的最大數量的標識符是多少?

考慮到hashmaps/dictionaries有內存限制,在C編程語言中可以使用多少散列標識符?

+2

我不認爲可以有一個普遍的答案到那個問題,因爲這是特定於實現的,並且還可以取決於運行編譯器的機器。 –

+1

很難說沒有更多的信息。什麼平臺(CPU/OS)?什麼編譯器?即便如此,取決於編譯器編寫者的操作。 – uliwitness

回答

4

該標準沒有指定限制,因此需要由編譯器或解釋器來做出選擇。

您還應該注意標識符可以在最終的二進制文件中編譯出來。

2

似乎沒有要在C標準的任何信息,但是C++標準並提,你也許可以作爲一個準則使用的一些最低限度的建議:

附錄B(資料) 實施數量 [implimits]

(2.8) - 塊範圍在一個塊[1 024]中聲明的標識符。

10

一般而言,標識符的數量是質量問題問題。我知道的所有編譯器僅受可用資源(內存)的限制。

有,然而,在C標準,C11,重點標識符最低限制的(幾乎無用)規範由我:

5.2.4。1個翻譯限制

執行應能夠翻譯和執行包含的 以下限制每一個的至少一個實例至少一個 程序:塊

  • 127個嵌套層次
  • 63條件包含的嵌套級別
  • 12位指針,數組和函數聲明符(以任意組合)修改 聲明中的算術,結構,聯合或空類型
  • 63一個完整的說明符中括號的說明符的嵌套級別
  • 63一個完整的表達式中括號表達式的嵌套級中的內部標識符或宏名稱(每一個通用字符名
  • 63個顯著初始字符或擴展源字符 被認爲是單個字符)
  • 31個外部標識符中的有意義的初始字符(每個通用字符名稱指定短標識符0000FFFF或 less被認爲是6個字符,每個通用字符名稱 指定短標識符00010000或更多是考慮10 個字符,並且每個擴展源字符被認爲是相同的 數量的字符作爲相應的通用字符名,如果 任何)
  • 4095在一個轉換單元外部標識符中聲明
  • 511識別符與塊範圍一個塊
  • 4095宏標識符同時在一個預處理轉換單元中定義
  • 127個參數中一個函數定義
  • 127參數在一個函數調用
  • 127個參數在一個宏定義
  • 127個參數中一個宏調用中的邏輯源極線
  • 4095個字符在字符串
  • 4095個字符的文字(後串聯)
  • 65535字節的對象(在託管環境中只)
  • 15嵌套級別執行#included文件
  • 1023 case標籤switch語句(不包括對任何嵌套switch語句)在一個單一的結構或聯合
  • 1023成員
  • 1023枚舉常數在一個單一的枚舉
  • 在單個結構聲明列表63級水平的嵌套結構或聯合定義

由於「至少有一個程序」部分,我認爲它幾乎沒有用處。我認爲目的很明確,但是如果你的供應商向你出售了一個編譯器,它能夠完全翻譯一個程序來測試這些限制,那麼你不會拿回你的錢:-)

+0

「單個結構或聯合中的1024個成員」有趣的限制 – Nergal

+0

@Nergal你的意思是1023? – Jens

+0

是錯字,但爲什麼是2^10-1的限制呢? – Nergal

相關問題