Partager via


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 :

  1. 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.
  2. Sélectionnez la page Propriétés>de configuration C/C++>Avancé.
  3. 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;
}