Avertissement du compilateur (niveau 1) C4834
dis carte valeur de retour de la fonction avec l’attribut 'nodis carte'
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 dis carte ed. Si un appelant dés carte 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 le cas void
de dis carte 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 la boîte de dialogue Pages de propriétés de votre 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é Disable Specific Warnings 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;
}