Ce guide complet explore les subtilités du comportement non défini en C, allant au-delà des explications typiques du manuel. Idéal pour les programmeurs C expérimentés, cette plongée profonde dans les aspects les plus obscurs du sujet est l'aboutissement d'un projet de six mois initialement prévu comme une série de onze parties, mais a été étendu à douze. Rédigé par Dmitry Sviridkin et édité par Andrey Karpov, ce travail est prévu pour la future publication d'impression.
Le livre plonge dans un large éventail de sujets, notamment:
- Introduction: Définition du comportement non défini et de ses conséquences; Exploration des conversions de rétrécissement et des conversions de type implicite.
- Problèmes entiers et points flottants: Examiner le débordement entier signé, les particularités à virgule flottante, la promotion entière et les nuances de
char
et l'extension des signes.
- Gestion et références de la mémoire: Adommagent les références pendantes,
string_view
, la plage basée sur les boucles, les auto-références et std::vector
invalidation de référence.
- Fonctions lambda et mutabilité: Analyser les listes de capture de fonction lambda, les tuples, la mutabilité inattendue, les références implicites, l'utilisation après le mouvement et l'extension à vie.
- analyse et déplacer la sémantique: s'attaquer à l'analyse la plus vexante, constantes non constantes, à déplacer la sémantique,
std::enable_if_t
vs std::void_t
et à oublier return
instructions.
- Opérateurs et E / S: couvrant les ellipses et les fonctions,
operator[]
, les défis de iostreams
Débogage, l'opérateur de la virgule, les blocs de fonctions et les types de taille zéro.
- chaînes et pointeurs intelligents: Discuter des chaînes à terminaison nulle,
std::shared_ptr
, de la conversion de type explicite et de la fonction standard sûre.
- boucles, récursivité et tampons: Exploration des boucles infinies, le problème d'arrêt, la récursivité, la manipulation
noexcept
et les débordements de tampon.
- RAII, pointeurs et initialisation: Comparaison (n) RVO et RAII, examinant la déréférence du pointeur nul, le fiasco d'ordre d'initialisation statique, les fonctions statiques en ligne, les violations ODR et les noms réservés.
- Types, variables et gammes: plonger dans les types triviaux et ABI, les variables non initialisées, les gammes illimitées, les fonctions non limites, les fonctions non virtuelles mais virtuelles, et les Vlas.
- pointeurs, concurrence et signaux: Adjustant des pointeurs non valides, placement nouveau pour les tableaux, les races de données, les blocages de mutex, la sécurité des signaux et les meilleures pratiques pour l'évitement des blocs de blocage.
- vecteurs, alignement et analyse statique: Analyser
std::vector::reserve
et std::vector::resize
, références non alignées, durée de vie des objets, analyse statique et comportement non défini et conclusion des remarques.
Licence et utilisation:
Ce travail est disponible pour référence, avec une attribution appropriée. La copie ou la reproduction nécessite l'autorisation de l'auteur (dmisvrl1@gmail.com). L'utilisation commerciale ou l'instruction fondée sur les frais est interdite.
sur les auteurs:
- dmitry sviridkin: un ingénieur logiciel chez AWS avec une vaste expérience dans le développement de logiciels haute performance et une formation en programmation système C et Linux.
- Andrey Karpov: co-fondateur du projet PVS-Studio avec plus de 15 ans d'expérience en analyse de code statique et qualité du logiciel, et un destinataire du prix MVP Microsoft.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn