5

是否可以使用预处理器发出不区分大小写的#define 语句?

例如,我想将 foobar 的任何大小写转换为 spameggs,即:

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

这背后的原因是我想 #define 一些 fortran 子例程以具有不同的名称,它们当然不区分大小写。请注意,我并不真正关心保留大小写方案(在最后一个示例中似乎有点胡说八道)。

4

2 回答 2

4

唉,如您所知,C 标识符区分大小写。因此,预处理器符号也是如此(如果一个区分大小写而另一个不区分大小写,当您打算使用预处理器仅更改其中一个符号时,您可能会遇到一些非常奇怪的行为)。这种行为没有覆盖标志,也没有替代define构造(至少我在 C/++ 的 GCC 编译器前端知道这一点)。

最明显的解决方案是grep您的代码foobar,不区分大小写。使用结果构建所有可能的 foobar 外壳的表,并且

  1. 将它们全部改正为一个一致的外壳
  2. 创建一个对所有情况进行重新定义的预处理器文件。

在后面的解决方案中,您不需要污染一些人类可读的代码 - 只需机器生成一个FixFooBar.h充满这些重新映射的文件,并在需要的地方包含它。

于 2011-08-28T12:12:06.053 回答
-1

您是否尝试过使用 entry 命令:

  subroutine name1 (args)
  entry      name2 (args)
  entry      name3 (args)
  ....
  return
  end
于 2011-11-07T12:52:34.010 回答