dans ce lien J'utilise Winapis en langage C. p> non signé wchar_t code> est Typedef code> éd comme wcharner code>. Mais je ne trouve pas ce genre de typedef dans mon SDK winnt.h code> ou mingw winnt.h code>. P>.
wchar_t code> est signé ou non signé? p>
3 Réponses :
La signature de type (par contraste, les types wchar_t code> n'est pas spécifiée. La norme ne dit que (3.9.1 / 5): P>
wchar_t code> doit avoir la même taille, la même signature et les mêmes conditions d'alignement (3.11) comme l'un des autres types intégrés, appelé son type sous-jacent p>. P>
blockQuote>
char16_t code> et char32_t code> sont expressément non signés.) P>
API Windows semble le définir comme non signé cependant.
@NetCoder: "non spécifié" ne signifie pas que personne n'est autorisé à le définir. Cela signifie simplement que la norme n'impose pas non plus la signature.
Oui, je sais ce que dit la norme, et je sais comment ça marche. La question est étiquetée winapi code> cependant, donc je pense que ce bit supplémentaire d'informations est toujours utile.
@netcoder ouais son utile cependant. Merci. Regardez le lien dans mon post.
@ user1317084: Votre question sur C ou sur la manière dont Winapi implémente certains aspects définis par la mise en œuvre de C? Ce serait bien si vous pouviez clarifier cela.
Savez-vous si les drapeaux de GCC -Funsigned-Char CODE> ou -FSIGNED-CHAR CODE> affectent-il? En d'autres termes, n'importe quel moyen de contrôler sa signature?
@Antonio: J'ai bien peur que je ne sache pas, pas plus que la documentation de la GCC ne semble la décrire. Peut-être demander sur les listes de diffusion de la GCC?
@Antonio, ces drapeaux n'affectant que char code>, je suis sûr que vous ne pouvez pas modifier si wchar_t code> est signé.
Sachez que le type varie de longueur par plate-forme. p>
Windows utilise UTF-16 et un WCHAR_T est 2 octets. Linux utilise un 4 octet wchar_t. P>
Sur la plupart des systèmes Linux que j'ai vu, wchar_t code> est un type de 32 bits, désignant probablement pour les données UTF-32.
Fixé. Cela fait quelques années que j'ai travaillé avec Unicode - je pensais que je me suis souvenu de Linux avec UTF-8, mais si oui, pourquoi avoir un octet wchar_t?
Les systèmes Linux les plus modernes font I> UTILISENT UTF-8 Normalement. C'est ce que Char code> est pour. Un WCHAR_T 32 bits > est utile pour UTF-32 où vous souhaitez coder à largeur fixe.
Je viens de tester sur plusieurs plates-formes, sans optimisation.
2) FreeBSD 11.2 (64-bit) + clang 6.0.0:
---- snip ----
#include<stdio.h>
#include<wchar.h>
const wchar_t INVERTED_BOM = 0xFFFE0000;
int main(void)
{
long long c = INVERTED_BOM;
printf("0x%016llX\n", c+0x10000000LL);
return 0;
}
---- snip ----
Une question similaire: Stackoverflow.com/Questtions/2395514/...
Je pense que cette page est juste incorrecte. La bibliothèque une fois sur un temps i> utilisé pour utiliser
abrégé non signé code> lorsque le compilateur n'avait pas de type intégréwchar_t code>. Devinez lenon signé code> vient de partir par erreur lors de la modification dewchar_t code>.Signé ou non signé, vous ne devriez pas l'utiliser. Voir utf8everywhere.org
@Pavel: En général, bien sûr, mais lorsque vous devez écrire de code de colle ou des tests de compilateur, ou des décodeurs de chaîne pour un débogueur ou un nombre d'autres cas d'utilisation valide que vous n'avez pas de choix, mais d'utiliser
wcharar_t code>. Les absolus de couverture ont tendance à ne pas être très utiles.