108 votes

doit utiliser size_t ou ssize_t

Dans mon code, je n'utilise pas int ou unsigned int. Je n'utilise que size_t ou ssize_t pour le portable. Par exemple :

typedef size_t intc;    // (instead of unsigned int)
typedef ssize_t uintc;  // (instead of int)

Porque strlen , string , vector ... toutes les utilisations size_t donc j'utilise habituellement size_t . Et je n'utilise que ssize_t alors qu'elle peut être négative.

Mais je trouve que :

Les types d'entiers non signés sont idéaux pour les utilisations qui traitent le stockage comme un tableau de bits. Utiliser un unsigned au lieu d'un int pour gagner un bit supplémentaire afin de représenter des entiers positifs n'est presque jamais une bonne idée. Les tentatives visant à garantir que certaines valeurs sont positives en déclarant des variables non signées seront généralement mises en échec par les règles de conversion implicites.

dans le livre Le langage de programmation C++ .

Je suis donc perplexe. Ai-je tort ? Pourquoi le STL ne respecte-t-il pas ce que suggère le livre ?

179voto

maditya Points 3372

ssize_t est utilisé pour les fonctions dont la valeur de retour peut être soit une taille valide, soit une valeur négative pour indiquer une erreur. Il est garanti de pouvoir stocker des valeurs au moins dans l'intervalle [-1, SSIZE_MAX] ( SSIZE_MAX dépend du système).

Vous devez donc utiliser size_t lorsque vous voulez retourner une taille en octets, et ssize_t à chaque fois que vous devez renvoyer soit une taille en octets, soit une valeur d'erreur (négative).

Voir : http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html

34voto

user657267 Points 5796

ssize_t n'est pas inclus dans la norme et n'est pas portable. size_t doit être utilisé pour la gestion de la taille des objets (il y a ptrdiff_t aussi, pour les différences de pointeurs).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X