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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top