2011-08-28 190 views
5

是否可以使用預處理器發出不區分大小寫的#define語句?不區分大小寫#define

例如,我想任何套管轉換foobar的來spameggs,即:

FooBar -> spameggs 
foobar -> spameggs 
fooBar -> spameggs 
Foobar -> spameggs 
FOOBAR -> spameggs 
FOOBAr -> spameggs (an odd possibility I know) 
etc 

這背後的原因是,我想#定義一些FORTRAN子程序有不同的名稱,他們當然不區分大小寫。請注意,我並不真正關心保留大寫形式(在最後一個例子中,這看起來有點廢話)。

+0

刪除標籤 - 這個問題無關,與[FORTRAN]語言。 – Rook

回答

4

唉,如您所知,C標識符區分大小寫。因此,預處理器符號也是如此(如果其中一個是區分大小寫的,另一個則不是,那麼當您打算僅使用預處理器更改其中一個符號時,可能會出現一些非常奇怪的行爲)。這種行爲沒有覆蓋標誌,也沒有替代define構造(至少我知道在C/++的GCC編譯器前端)。

最明顯的解決方案將是grep您的代碼爲foobar,不區分大小寫。使用結果構建所有可能的foobar的外殼的表,要麼

  1. 他們正確的一個一致的外殼
  2. 創建一個具有重新定義爲所有的情況下,單個預處理器文件。

在後面的解決方案中,您不需要污染一些人類可讀的代碼 - 只需要計算機生成一個完整的重新映射文​​件,並在需要時包含它。

+0

非常令人沮喪,但我所期待的那種。我想到了解決方案1和解決方案2,只是希望我不會因爲他們覺得哈克而使用它們。 – VolatileStorm

-1

您是否嘗試過使用進入命令:

subroutine name1 (args) 
    entry  name2 (args) 
    entry  name3 (args) 
    .... 
    return 
    end 
+1

這是一個C++問題。 –