不区分大小写的#define

时间:2011-08-28 09:10:06

标签: c-preprocessor preprocessor-directive

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

例如,我想将foobar的任何外壳转换为spameggs,即:

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

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

2 个答案:

答案 0 :(得分:4)

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

最明显的解决方案是grepfoobar的代码,不区分大小写。使用结果构建一个包含所有可能的foobar外壳的表格

  1. 将它们全部纠正为一致的套管
  2. 创建一个预处理器文件,对所有案例进行重新定义。
  3. 在后面的解决方案中,你不需要用这个来污染一些人类可读的代码 - 只需要机器生成一个充满这些重映射的FixFooBar.h文件,并将其包含在需要的地方。

答案 1 :(得分:-1)

您是否尝试过使用输入命令:

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