Avertissement du compilateur (niveau 1) C4834
abandon de la valeur de retour de la fonction ayant l'attribut « nodiscard »
Notes
À compter de la norme C++17, l’attribut spécifie que la [[nodiscard]]
valeur de retour d’une fonction n’est pas destinée à être ignorée. Si un appelant ignore la valeur de retour, le compilateur génère l’avertissement C4834. Bien que cet attribut ait été introduit en C++17, le compilateur respecte cet attribut et génère des avertissements liés à celui-ci lors de l’utilisation /std:c++14
et des versions ultérieures.
Pour résoudre cet avertissement, tenez compte de la raison pour laquelle votre code n’utilise pas la valeur de retour. Votre utilisation de la fonction peut ne pas correspondre à son intention. Vous pouvez contourner l’avertissement en affectant la valeur à std::ignore
ou en la castant void
si la valeur est intentionnelle.
L’affectation à est std::ignore
préférée à la conversion en void
C++11 et versions ultérieures, car elle rend votre intention plus claire et ne déclenche pas l’avertissement C26457 si activé dans vos paramètres d’analyse du code.
Cet avertissement a été introduit dans Visual Studio 2017 version 15.3 comme avertissement de niveau 3. Il a été remplacé par un avertissement de niveau 1 dans Visual Studio 2017 version 15.7. Le code compilé sans avertissements dans les versions du compilateur avant Visual Studio 2017 version 15.3 peut désormais générer C4834. Pour plus d’informations sur la désactivation des avertissements introduits dans une version particulière du compilateur ou une version ultérieure, consultez avertissements du compilateur par version du compilateur.
Pour désactiver l’avertissement sans modification du code
Vous pouvez désactiver l’avertissement pour une ligne de code spécifique à l’aide du warning
pragma. #pragma warning(suppress : 4834)
Vous pouvez également désactiver l’avertissement dans un fichier à l’aide du pragma #pragma warning(disable : 4834)
d’avertissement. Vous pouvez désactiver l’avertissement globalement dans les builds de ligne de commande à l’aide de l’option /wd4834
de ligne de commande.
Pour désactiver l’avertissement d’un projet entier dans l’IDE Visual Studio :
- Ouvrez le dialogue Pages de propriétés du projet. Pour plus d’informations sur l’utilisation de la boîte de dialogue Pages de propriétés, consultez Pages de propriétés.
- Sélectionnez la page Propriétés>de configuration C/C++>Avancé.
- Modifiez la propriété Désactiver les avertissements spécifiques pour ajouter
4834
. Choisissez OK pour appliquer vos modifications.
Exemple
Cet exemple génère l’erreur C4834 et montre quatre façons de le corriger :
// C4834.cpp
// compile using: cl /EHsc /std:c++17
#include <iostream>
[[nodiscard]]
int square_of(int i) { return i * i; }
int main()
{
square_of(42); // warning C4834: discarding return value of function with 'nodiscard' attribute
// If ignoring the [[nodiscard] attribute is unintentional, make use of the return value as intended:
// For example:
std::cout << "square_of(42) = " << square_of(42) << "\n"; // Ok
// Or:
int result = square_of(43); // Ok
std::cout << "square_of(43) = " << result << "\n";
// If ignoring the [[nodiscard]] attribute value is intentional, you have two options:
// Preferrably, assign the return value to std::ignore:
std::ignore = square_of(42); // Ok, C++11 and higher
// Alternatively, you can cast the return value to void.
// The intent may be less clear to other developers.
(void) square_of(42); // May produce warning C26457
return 0;
}