Без учета регистра #define - PullRequest
5 голосов
/ 28 августа 2011

Можно ли с помощью препроцессора выдавать оператор #define без учета регистра?

Например, я хочу преобразовать любой регистр foobar в spameggs, т.е.и они, конечно, нечувствительны к регистру.Обратите внимание, что меня не волнует сохранение схемы капитализации (что в последнем примере кажется бессмысленным).

Ответы [ 2 ]

4 голосов
/ 28 августа 2011

Увы, как вы знаете, идентификаторы C чувствительны к регистру. Следовательно, символы препроцессора - то же самое (если один из них чувствителен к регистру, а другой - нет, вы можете получить очень странное поведение, если намереваетесь изменить только один из символов препроцессором). Для этого поведения нет ни флага переопределения, ни альтернативной конструкции define (по крайней мере, я знаю об этом во внешних интерфейсах компилятора GCC для C /++).

Наиболее очевидным решением будет grep ваш код для foobar без учета регистра. Используйте результаты, чтобы составить таблицу всех возможных оболочек foobar и либо

  1. Исправьте их все в один последовательный корпус
  2. Создайте один файл препроцессора, который выполняет переопределения для всех случаев.

В последующем решении вам не нужно загрязнять некоторый читабельный человеком код - просто создайте файл FixFooBar.h, полный этих преобразований, и включите его при необходимости.

0 голосов
/ 07 ноября 2011

Вы пытались использовать команду ввода:

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