Derleyici uyarısı (düzey 1) C4834
'nodiscard' özniteliğine sahip işlevin dönüş değerini atma
Açıklamalar
C++17 Standard'dan başlayarak özniteliği, [[nodiscard]]
işlevin dönüş değerinin atılmak üzere tasarlanmamış olduğunu belirtir. Çağıran dönüş değerini atarsa, derleyici C4834 uyarısını oluşturur. Bu öznitelik C++17'de tanıtıldı, ancak derleyici bu özniteliği dikkate alır ve ve daha sonra kullanırken /std:c++14
bununla ilgili uyarılar oluşturur.
Bu uyarıyı çözmek için kodunuzun neden dönüş değerini kullanmadığı konusunu göz önünde bulundurun. İşlevi kullanımınız amacıyla eşleşmeyebilir. Değeri atarak veya değeri std::ignore
atarak kasıtlı olarak atarak void
uyarıyı atabilirsiniz.
Atama, std::ignore
amacınızı daha net hale getirdiği ve kod çözümleme ayarlarınızda etkinleştirilirse Uyarı C26457'yi tetiklemeyecek şekilde C++11 ve üzeri sürümlerde atama void
yerine tercih edilir.
Bu uyarı, Visual Studio 2017 sürüm 15.3'te düzey 3 uyarısı olarak sunulmuştur. Visual Studio 2017 sürüm 15.7'de düzey 1 uyarısına değiştirildi. Visual Studio 2017 sürüm 15.3'den önceki derleyici sürümlerinde uyarı olmadan derlenen kod artık C4834 oluşturabilir. Belirli bir derleyici sürümünde veya sonraki sürümlerinde sunulan uyarıları devre dışı bırakma hakkında bilgi için bkz . Derleyici sürümüne göre derleyici uyarıları.
Kod değişikliği olmadan uyarıyı kapatmak için
Pragma#pragma warning(suppress : 4834)
, kullanarak belirli bir kod satırı için uyarıyı warning
kapatabilirsiniz. Uyarı pragması #pragma warning(disable : 4834)
olan öğesini kullanarak bir dosya içindeki uyarıyı da kapatabilirsiniz. Komut satırı derlemelerinde, komut satırı seçeneğini kullanarak uyarıyı /wd4834
genel olarak kapatabilirsiniz.
Visual Studio IDE'de projenin tamamı için uyarıyı kapatmak için:
- Projeniz için Özellik Sayfaları iletişim kutusunu açın. Özellik Sayfaları iletişim kutusunun nasıl kullanılacağı hakkında bilgi için bkz . Özellik Sayfaları.
- Yapılandırma Özellikleri>C/C++>Gelişmiş sayfasını seçin.
- Eklemek
4834
için Belirli Uyarıları Devre Dışı Bırak özelliğini düzenleyin. Değişikliklerinizi uygulamak için Tamam'ı seçin.
Örnek
Bu örnek C4834 oluşturur ve bunu düzeltmenin dört yolunu gösterir:
// 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;
}