2011-08-28 193 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++问题。 –