Visual Studio'da varsayılan olarak güvenli uyarıları (_CRT_SECURE_NO_WARNINGS) projelerden kaldırın


196

Scanf () gibi işlevler kullanıldığında gelen derleyici öncesi güvenli uyarıları kaldıran tüm projeler için varsayılan olarak ayarlamanın bir yolu var mı? Proje seçeneğine veya #define _CRT_SECURE_NO_WARNINGSkodun başlangıcına bir satır ekleyerek bunu yapabileceğinizi fark ettim .

Kendimi tekrar tekrar programlama yarışmalarını çözmek için yeni projeler oluştururken buluyorum ve eklemek gerçekten can sıkıcı (ve değerli zaman alıyor):

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

Kodun başlangıcında veya her yeni projeye başladığımda ön derleyici seçeneklerinde ayarlamak için.


2
Bir proje şablonunu _CRT_SECURE_NO_WARNINGS tanımlı olarak dışa aktarabilirsiniz.
BlueWanderer

Bu iyi bir çözüm gibi görünüyor. Ben bakıyorum. Teşekkürler!
Juan Martinez

3
sonunda #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel

3
Sonunda @MartijnvanWezel 1 gerekli değildir.
qqqqq

1
@qqqqq Gerçek olmaya zorlayacak
Martijn van Wezel

Yanıtlar:


286

İstenilen tüm projeleri çözüm gezgininde işaretleyin.

Alt-F7 tuşlarına basın veya çözüm gezgininde sağ tıklayın ve "Özellikler" i seçin

Konfigürasyonlar: Tüm Konfigürasyonlar

Düzenleyicisini çağırmak için Önişlemci Tanımları satırına tıklayın

Düzenle'yi seçin ...

"_CRT_SECURE_NO_WARNINGS" öğesini üstteki Önişlemci Tanımları beyaz kutusuna kopyalayın.

resim açıklamasını buraya girin


10
Bu, OP'nin zaten bildiği bir proje için nasıl ekleneceğini açıklar (% 100 net olmasa da). Anahtar soru, tüm projelerde görünmesi için nasıl ekleneceğidir. İdeal olarak, her yere dahil edilmesi için% (PreprocessorDefinitions) makrosuna nasıl eklenebilir?
Rob Gilliam

13 Ocak 2015 itibariyle düzeltildi.

Bu sadece ilk adımı açıklar. Her şeyi istediğiniz gibi yapılandırdıktan sonra, bir proje şablonunu da dışa aktarmak istersiniz ( Talimatlar için bkz. Nasıl yapılır: Proje şablonları oluşturma ).
1919'da

92

Belki de VS'ye yeniyim ve kesinlikle C'ye yeniyim, ama inşa etmeme izin veren tek şey

#pragma warning(disable:4996)

Dosyamın en üstünde, sprintf ile aldığım C4996 hatasını bastırdı

Biraz can sıkıcı ama benim küçük kod biraz ve çok kolay mükemmel.

Burada okudum: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
Bu sayfada gösterilen #define'in her varyasyonunu denedim (sonunda 1 olan ve olmayan) ve sadece #pragma benim için çalıştı. (VS2013 Topluluk sürümü) Bir şey eksik olduğuma eminim, ama bir noktada, işe yaraması için ona ihtiyacın var.
Spike0xff

Aynı şey vardı - boktan hissediyor ama günün sonunda, iyi işliyor, @ Spike0xff
Shaun314

2
_CRT_SECURE_NO_WARNINGS'ın VC ++ 2015'te çalışmadığını ancak yukarıdaki çalışmaların geçerli olduğunu onaylayabilirim. Teşekkürler!
Shital Shah

@ShitalShah Onayınız kişisel deneylere veya bazı resmi Microsoft belgelerine dayanıyor mu?
qqqqq

1
@bri: Koşulsuz olarak varsayılanı ayarlamak istenmeyen etkilere neden olabilir. Gerçekten davranışı eskisine geri yüklemek istedin. Bunu yapmak için #pragma warning(push)/#pragma warning(pop) yerine kullanın.
19'da öngörülemez

29

Otomatik olarak değil, hayır. BlueWandered'in önerdiği gibi bir proje şablonu oluşturabilir veya mevcut ve gelecekteki tüm projeleriniz için kullanabileceğiniz özel bir özellik sayfası oluşturabilirsiniz.

  1. Mülk Yöneticisini açın (Görünüm-> Mülk Yöneticisi)
  2. Mülk Yöneticisinde Projenize sağ tıklayın ve "Yeni Proje Özellik Sayfası Ekle" yi seçin
  3. Bir ad verin ve ortak bir dizinde oluşturun. Özellik sayfası tüm oluşturma hedeflerine eklenir.
  4. Yeni özellik sayfasını sağ tıklayın ve "Özellikler" i seçin. Bu, özellikleri açacak ve ayarları bir proje için düzenlerseniz yaptığınız gibi değiştirmenize izin verecektir.
  5. "Ortak Özellikler-> C / C ++ -> Önişlemci" ye gidin
  6. "Önişlemci Tanımları" ayarını düzenleyin ve ekleyin _CRT_SECURE_NO_WARNINGS.
  7. Kaydet ve işin bitti.

Şimdi yeni bir proje oluşturduğunuzda, bu özellik sayfasını şu şekilde ekleyin ...

  1. Mülk Yöneticisini açın (Görünüm-> Mülk Yöneticisi)
  2. Mülk Yöneticisinde Projenize sağ tıklayın ve "Mevcut Proje Özellik Sayfasını Ekle" yi seçin

Buradaki avantaj, yalnızca ortak ayarları yönetmek için tek bir yer almanın yanı sıra, ayarları her değiştirdiğinizde, onu kullanan TÜM projelere yayıldıklarıdır. _CRT_SECURE_NO_WARNINGSProjelerinizde kullanmak istediğiniz birçok ayar veya Boost gibi kitaplıklarınız varsa bu kullanışlıdır .


Bu harika. Bugüne kadar Mülk Yöneticisini hiç keşfetmediğime inanamıyorum.
James Johnston

20

Buradaki tüm çözümler VS2013'ümde işe yaramadı, ancak stdafx.h içine daha #define _CRT_SECURE_NO_WARNINGSönce koydum #pragma onceve tüm uyarılar bastırıldı. Not: Araştırmamı desteklemek için sadece prototipleme amaçlı kod yazıyorum, bu nedenle lütfen kodunuzu yazarken bu yöntemin etkilerini anladığınızdan emin olun.

Bu yardımcı olur umarım


1
Nerede stdafx.hbulunur?
SomethingSomething

1
Bilmeyenler için, bu şekilde 1 olarak tanımlanmalıdır: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

VS 2017 için iki sentim:

Her iki stilde de stdafx.h içinde çalıştığını onaylayabilirsiniz:

a)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

b)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(MSDN şebeke çağrıları için başka bir tanım ekledim ..) Tabii ki tercih ediyorum a).

Şunu onaylayabilirim: #define _CRT_SECURE_NO_WARNINGS (değer olmadan) ÇALIŞMIYOR .

PS asıl nokta, bu tanımları işlev bildirimleri ÖNCE, yani * .h'den önce koymaktır.


Visual Studio 2010'da da çalışır.
ebyrob

8

sadece kopyala " _CRT_SECURE_NO_WARNINGS " projelere yapıştırın- > özellikler-> c / c ++ -> önişlemci-> önişlemci tanımları ok tıklayın. çalışacak


0

Projeniz stdafx.h kullanmıyorsa, aşağıdaki satırları .cpp dosyanızdaki ilk satırlar olarak koyabilirsiniz ve derleyici uyarısı kaybolur - en azından benim için Visual Studio C ++ 2008'de yaptı.

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

Onlardan önce yorum ve boş satırlar olması sorun değil.


0

Projenizin Özelliklerine _CRT_SECURE_NO_WARNINGS ekleyebilmenize rağmen , en kolay yol her türlü uyarı ve hata devre dışı bırakmak için stdafx.h kullanmaktır, sadece aşağıdaki satırı (ve benzerlerini) yerleştirdiğinizden emin olun.

#pragma once

Ayrıca, tanımlandığı sürece _CRT_SECURE_NO_WARNINGS için bir değer (yani "1") tanımlamaya gerek yoktur. Yani şöyle görünmeli:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

Bu yanlış. Emir bir fark yaratmaz. Hiç. Asla açıklayamadığınızı varsayıyorum, bunun neden gerekli olduğunu, çünkü bir sebebi yok.
19'da 12

Bu bir "sipariş" meselesi değildir, sadece iki kez kontrol edilir: #pragma'dan sonra #define _CRT_SECURE_NO_WARNINGS yerleştirirseniz, yine de bu hatayı alırsınız!
Michael Haephrati

Davranışı #pragma onceuygulama tanımlıdır, ancak Visual Studio'daki ortak fiili standardı izler. Sizin için bir fark yaratırsa, ister ön işlemciyi pragmadan önce veya sonra tanımlayın, o zaman kırık bir proje yapılandırmanız vardır (bu, - gereksiz yere - "önceden derlenmiş üstbilgileri" ve "stdafx.h'yi eşitlediğinizi varsayar) " ).
13'te öngörülemez

“Bozuk proje yapılandırması” nın anlamı nedir? Yeni bir Win32 projesi oluşturdum ve her iki senaryoyu da test ettim.
Michael Haephrati

Bu önişlemci simgesini kullanma ile ilgili gerçek gereksinimler hakkında bilgi edinmek için lütfen resmi belgelere bakın .
19'da
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.