Есть ли переключатель для отключения триграфов с помощью clang? - PullRequest
10 голосов
/ 22 февраля 2012

У меня есть некоторый (старый) код, который я создаю с помощью clang впервые. Код выглядит примерно так:

sprintf(buf, "%s <%s ????>", p1, p2);

Clang выдает следующее предупреждение (ошибка с -Werror):

test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
    sprintf(buf, "%s <%s ????>", p1, p2);
                           ^

Ясно, что ??> не предназначен для триграфии, поэтому я хочу полностью отключить триграфы (источник нигде не использует их намеренно).

Я пытался -no-trigraphs, но это не совсем вариант:

clang: warning: argument unused during compilation: '-no-trigraphs'

Я могу отключить предупреждение о триграфах с помощью -Wno-trigraphs, но я не хочу, чтобы преобразование триграфов вообще имело место.

ПРИМЕЧАНИЕ: триграфы были включены как непреднамеренный побочный эффект использования -std=c89.

Ответы [ 2 ]

6 голосов
/ 22 февраля 2012

Попробуйте использовать режим gnu * - «По умолчанию триграфы отключены в режимах gnu *; их можно включить с помощью параметра -trigraphs».(другие отличия и параметры командной строки см. в http://clang.llvm.org/docs/UsersManual.html#c_modes)

4 голосов
/ 22 февраля 2012

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

sprintf(buf, "%s <%s ????"">", p1, p2);
...