Modifications récentes dans C 11
C 11 a introduit des changements importants qui peuvent avoir un impact sur la compilation du code existant, notamment les suivants :
Langage de base
- L'introduction de l'opérateur explicite bool() dans la bibliothèque standard, remplaçant les instances de l'opérateur void*(). Ce changement peut entraîner l'échec de la compilation du code qui reposait auparavant sur des conversions implicites.
- Les nouveaux mots clés, notamment alignas, alignof, char16_t, constexpr et nullptr, peuvent entrer en conflit avec les identifiants existants dans le code qui ne suivait pas les conventions de dénomination. .
- Le comportement de la division entière a changé, puisque C 11 arrondit toujours le résultat vers 0, tandis que C 03 permettait d'arrondir vers 0 ou l'infini négatif.
- Les fonctions membres spéciales implicitement déclarées, telles que les constructeurs ou les destructeurs, sont désormais définies comme supprimées si leur définition implicite aurait été mal formée, ce qui peut entraîner l'utilisation de ces fonctions par le code dans certains les contextes deviennent invalides.
- Les destructeurs déclarés par l'utilisateur ont une spécification d'exception implicite, ce qui signifie qu'ils ne peuvent pas lever d'exceptions. Le code qui repose sur des destructeurs lançant des exceptions devra peut-être être modifié.
- Les appels dépendants de fonctions avec liaison interne sont désormais autorisés, ce qui peut modifier la résolution des fonctions surchargées dans les modèles.
Modifications de la bibliothèque
- Identifiants ajoutés à la bibliothèque standard C dans C 11 peut entrer en conflit avec les identifiants existants dans le code qui utilisait des en-têtes portant les mêmes noms.
- La fonction d'échange a été déplacée de l' en-tête vers le en-tête. Code qui inclut il faudra peut-être le mettre à jour pour inclure à la place.
- L'espace de noms global posix est désormais réservé à la standardisation. Le code qui définit les identifiants dans cet espace de noms devra peut-être être modifié.
- Les macros nommées override, final, carry_dependency ou noreturn ne sont pas valides en C 11. Le code qui définit ces macros devra peut-être être mis à jour.
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!