Question

J'ai du code (hérité) que je construis avec Clang pour la première fois. Le code est quelque chose comme:

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

Clang donne l'avertissement suivant (erreur avec -Werror):

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

Clairement le ??> n'est pas destiné comme un trigraphe, donc je veux désactiver complètement les trigraphes (la source ne les utilise intentionnellement nulle part).

j'ai essayé -no-trigraphs Mais ce n'est pas vraiment une option:

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

Je peux désactiver les trigraphes avec -Wno-trigraphs Mais je ne veux pas du tout que la conversion du trigraphe ait lieu.

Remarque: les trigraphes ont été activés comme un effet secondaire involontaire de l'utilisation -std=c89.

Était-ce utile?

La solution

Essayez d'utiliser le mode GNU * - "Les trigraphes par défaut sont hors des modes GNU *; ils peuvent être activés par l'option -trigraphs." (voir http://clang.llvm.org/docs/usersmanual.html#c_modes pour d'autres différences et commutateur de ligne de commande)

Autres conseils

Je ne pouvais pas voir un moyen évident de désactiver les trigraphes (plutôt que l'avertissement des trigraphes). Le moyen le plus simple de corriger ce code est probablement de le changer en:

sprintf(buf, "%s <%s ????"">", p1, p2);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top