Existe uma opção para desativar trigraphs com clang?
Pergunta
Eu tenho um código (legado) que estou construindo com clang pela primeira vez.O código é algo como:
sprintf(buf, "%s <%s ????>", p1, p2);
O Clang fornece o seguinte aviso (erro com -Werror
):
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
sprintf(buf, "%s <%s ????>", p1, p2);
^
Claramente, o ??>
não se destina a ser um trígrafo, então eu quero desabilitar completamente os trígrafos (a fonte não os usa intencionalmente em qualquer lugar).
Eu tentei -no-trigraphs
, mas isso não é realmente uma opção:
clang: warning: argument unused during compilation: '-no-trigraphs'
Posso desligar o aviso de trigraphs com -Wno-trigraphs
, mas não quero que a conversão de trigraphs realmente ocorra.
NOTA: Trigraphs foram ativados como um efeito colateral não intencional do uso de -std=c89
.
Solução
Tente usar o modo gnu * - "Os trígrafos são desativados por padrão nos modos gnu *; eles podem ser ativados pela opção -trigraphs."(consulte http://clang.llvm.org/docs/UsersManual.html#c_modes para outras diferençase troca de linha de comando)
Outras dicas
Não consegui ver uma maneira óbvia de desabilitar trigraphs (em vez do aviso de trigraphs).Provavelmente, a maneira mais fácil de corrigir esse código é alterá-lo para:
sprintf(buf, "%s <%s ????"">", p1, p2);