mingw printf taille spécification caractère h

Visual Studio contient un tableau de spécifications de taille et de distance indiquant que je peux faire quelque chose comme ceci, en utilisant le préfixe h pour spécifier une chaîne de caractères à un octet, indépendamment de printf ou de wprintf:

int main() { char test[]= "abc"; _tprintf(_T("%hs\n"),test); } 

Mais si je comstack la même chose avec mingw gcc et -Wall, je reçois l’avertissement suivant:
warning: format '%hs' expects type 'short int *', but argument 2 has type 'char *'

Est-ce que ce que je fais est un moyen acceptable de spécifier une chaîne de caractères à un octet dans mingw?

Merci

Edit-Cette question a été répondu ci-dessous dans les moindres détails. La réponse courte est oui, c’est un moyen acceptable de spécifier une chaîne de caractères d’un octet dans mingw et l’avertissement peut être ignoré.

Vous remarquerez également que les documents Visual Studio disent:

Remarque: les préfixes h et l sont des extensions Microsoft lorsqu’ils sont utilisés avec des données de type char.

Je pense que cela serait plus exact de dire “utilisé avec les spécificateurs de format 'c' ou 's' (majuscules ou minuscules)”.

Sachez que le compilateur GCC ne sait vraiment pas comment le runtime de Microsoft traite les chaînes au format printf() et l’avertissement que GCC donne est adapté aux runtimes qu’il utilise normalement. Lors de la construction avec MinGW, un msvcrt.dll exécution Microsoft C fourni avec Windows, msvcrt.dll , est utilisé (bien que MinGW fournisse des remplacements ou des wrappers pour certaines fonctions de la bibliothèque). Il y a donc parfois confusion entre ce que le compilateur pense être correct pour une printf() format printf() et les arguments fournis à printf() et ce que le moteur d’exécution fera réellement.

Par exemple, jusqu’à récemment, l’utilisation de ll sur une conversion d’entier pour formater un type int de 64 bits ne fonctionnait pas correctement dans MinGW. Je ne sais pas si le ‘correctif’ pour cela s’est produit dans les fonctions de support de MinGW ou si msvcrt.dll été mis à jour pour prendre en charge le modificateur ll (je soupçonne que msvcrt.dll été mis à jour – je devrai vérifier …) .

Quoi qu’il en soit, cela revient à dire que, quels que soient les avertissements donnés par GCC à propos de la printf() format printf() , vous devrez probablement utiliser les documents MSVC pour les chaînes de format, car c’est un environnement d’exécution MS utilisé par MinGW. . Si vous n’aimez pas l’avertissement généré, vous pouvez envisager d’append l’option -Wno-format à votre script de génération MinGW.