40 votes

Quelle est la Relation Entre le C et le C++ Normes?

J'ai écrit cette réponse et j'ai cité http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters

N'est pas représentable comme unsigned char et ne pas l'égalité des expressions du FOLKLORE, le comportement est indéfini

Quand je suis allé inspecter l'édition qui avait ajouté cette phrase , j'ai trouvé que l'auteur du commentaire:

Ne pouvez pas utiliser négatif signé caractères avec tout ctype.h fonction par C99 7.4/1

L'auteur en citant à partir du standard C99 en C++ documentation. Est valide? Je ne pouvais pas trouver quoi que ce soit sur la définition de cette fonction dans la norme C++, donc je dois supposer qu'il est valide.

Mais cela me concerne pour 2 raisons:

  1. Comment puis-je savoir quelle version de la norme la norme C++ dépend?
  2. Il y a des listes de l'différences entre le C et le C++ partout. Si je suis à la recherche sur le C standard avec référence à C++ comment pouvais-je savoir si le domaine, je suis à la recherche a été remplacé?

34voto

Angew Points 53063

Pour la première question:

La norme C++ explicitement les listes de la norme(s) dont il dépend, dans ses références Normatives l'article. Pour le C++14, [intro.refs] 1.2/1 advient-il de la liste C 99:

  • ISO/IEC 9899:1999, les langages de Programmation — C
  • ISO/IEC 9899:1999/Cor.1:2001(E), les langages de Programmation — C, Rectificatif Technique 1
  • ISO/IEC 9899:1999/Cor.2:2004(E), les langages de Programmation — C, Rectificatif Technique 2
  • ISO/IEC 9899:1999/Cor.3:2007(E), les langages de Programmation — C, Rectificatif Technique 3

Pour la deuxième question:

La norme C++ ne prend pas implicitement intégrer toutes les parties de la norme C; toutes les références à la norme C sont explicites. Une bonne source d'informations sur l'endroit où C++ s'écarte de C est l'Annexe C, "Compatibilité" de la norme C++, en particulier C. 1 [diff.iso].

En outre, les références à la bibliothèque C standard sont dispersés à travers la description de la norme C++ de la bibliothèque (chapitres 17 et 30 en C++14). D'un intérêt particulier peut être:

  • 17.2 [bibliothèque.c], qui décrit la base de l'inclusion de la bibliothèque standard C
  • Chapitre 18 [langue.support], qui décrit un grand nombre de l' <c:::> - têtes de la norme C++ de la bibliothèque (celles qui offrent la bibliothèque C standard de fonctionnalité).

14voto

Baum mit Augen Points 3571

Comment puis-je savoir quelle version de la norme la norme C++ dépend?

En C++ 14, c'est la norme ISO/IEC 9899:1999 (plus de trois corrigendums, donc C99 dans l'essence), comme indiqué au point 1.2 [intro.refs] dans N4140. En C++98, il a été C90, en C++17, ce sera probablement C11, mais le C++ standard, ce sera toujours explicite.

Si je suis à la recherche sur le C standard avec référence à C++ comment pouvais-je savoir si le domaine, je suis à la recherche a été remplacé?

Vous regardez dans la norme C++, il importe de manière explicite le C définitions de moins restrict ou tout comportement qu'il veut ou rend explicite les modifications.

Habituellement, la lecture d'une bonne documentation, au lieu de la norme elle-même vous servira tout aussi bien.


Pour répondre à votre question initiale:

L'auteur en citant à partir du standard C99 en C++ documentation. Est valide?

Oui, parce que

1 Tables 74 [contient std::tolower, moi], 75, 76, 77, 78, et 79 décrire les en-têtes <cctype>, <cwctype>, <cstring>, <cwchar>, <cstdlib> (conversions de caractères), et <cuchar>, respectivement.
2 Le contenu de ces en-têtes doit être la même que la Bibliothèque Standard C-têtes <ctype.h>, <wctype.h>, <string.h>, <wchar.h>, et <stdlib.h> et le C Unicode TR-tête <uchar.h>, respectivement, avec la les modifications suivantes [aucun de ceux qui s'appliquent à l' std::tolower, moi]:

21.8 [c.chaînes] en N4140

3voto

Lundin Points 21616

L'édition est correcte et ce texte a été dans la norme depuis C90.

De C90 4.3

L'en-tête déclare à plusieurs fonctions utiles pour les tests et de la cartographie de caractères. Dans tous les cas, l'argument est un int , le la valeur de ce qui est représentable comme un unsigned char ou est égale à la valeur de la macro expressions du FOLKLORE . Si l'argument est tout autre valeur, le comportement est indéfini.

De C11 7.4/1

L'en-tête déclare à plusieurs fonctions utiles pour la classification des et de la cartographie de caractères. Dans tous les cas, l'argument est un int, le la valeur de ce qui est représentable comme un unsigned char ou est égale à la valeur de la macro expressions du FOLKLORE. Si l'argument a une autre valeur, le comportement est indéfini.

Texte identique; C a toujours été comme ça. Donc, il n'est pas question que C version votre version C++ utilise, parce que tous les C versions sont équivalentes.

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