Hapus peringatan aman (_CRT_SECURE_NO_WARNINGS) dari proyek secara default di Visual Studio


195

Apakah ada cara untuk mengatur secara default untuk semua proyek menghapus peringatan aman precompiler yang muncul ketika menggunakan fungsi seperti scanf (). Saya menemukan bahwa Anda dapat melakukannya dengan menambahkan baris dalam opsi proyek atau #define _CRT_SECURE_NO_WARNINGSdi awal kode.

Saya menemukan diri saya berulang kali membuat proyek baru untuk menyelesaikan kontes pemrograman dan sangat menjengkelkan (dan membutuhkan waktu yang berharga) untuk menambahkan:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

Di awal kode, atau untuk mengaturnya di opsi precompiler setiap kali saya memulai proyek baru.


2
Anda dapat mengekspor template proyek dengan _CRT_SECURE_NO_WARNINGS ditentukan.
BlueWanderer

Itu sepertinya solusi yang baik. Saya mencari ke dalamnya. Terima kasih!
Juan Martinez

3
Anda lupa angka 1 di akhir #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel

3
@ MartijnvanWezel 1 pada akhirnya tidak diperlukan.
qqqqq

1
@qqqqq Ini akan memaksa untuk menjadi kenyataan
Martijn van Wezel

Jawaban:


286

Tandai semua proyek yang diinginkan dalam penjelajah solusi.

Tekan Alt-F7 atau klik kanan pada solution explorer dan pilih "Properties"

Konfigurasi: Semua Konfigurasi

Klik pada baris Definisi Prosesor untuk memohon editornya

Pilih Edit ...

Salin "_CRT_SECURE_NO_WARNINGS" ke dalam kotak putih Definisi Prosesor di bagian atas.

masukkan deskripsi gambar di sini


10
Ini menjelaskan cara menambahkannya untuk satu proyek yang saya pikir OP sudah tahu (walaupun tidak 100% jelas). Pertanyaan kuncinya adalah bagaimana menambahkannya sehingga muncul di semua proyek. Idealnya, bagaimana seseorang dapat menambahkannya ke makro% (PreprocessorDefinitions) sehingga disertakan di mana-mana?
Rob Gilliam

Diperbaiki pada 13 Januari 2015.

Ini hanya menjelaskan langkah pertama. Setelah mengonfigurasikan semuanya sesuai dengan yang Anda butuhkan, Anda juga akan ingin mengekspor templat proyek (lihat Cara: Membuat templat proyek untuk petunjuk).
IInspectable

92

Mungkin karena saya masih baru untuk VS dan pasti baru untuk C, tetapi satu-satunya hal yang memungkinkan saya untuk membangun adalah menambahkan

#pragma warning(disable:4996)

Di bagian atas file saya, ini menekan kesalahan C4996 yang saya dapatkan dengan sprintf

Agak menyebalkan tapi sempurna untuk sedikit kode saya dan sejauh ini yang paling mudah.

Saya membacanya di sini: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
Saya mencoba setiap variasi #define yang ditampilkan di halaman ini (dengan dan tanpa angka 1 di bagian akhir) dan hanya #pragma yang berfungsi untuk saya. (VS2013 edisi Komunitas) Saya yakin saya kehilangan sesuatu, tetapi pada titik tertentu, Anda hanya perlu bekerja agar Anda bisa melanjutkannya.
Spike0xff

Punya hal yang sama persis - rasanya menyebalkan tapi pada akhirnya, ya ampun, ia bekerja @ Spike0xff
Shaun314

2
Saya dapat mengonfirmasi _CRT_SECURE_NO_WARNINGS tidak berfungsi di VC ++ 2015 tetapi berfungsi di atas. Terima kasih!
Shital Shah

@ShitalShah Apakah konfirmasi Anda didasarkan pada eksperimen pribadi atau dokumentasi resmi Microsoft?
qqqqq

1
@ Bri: Pengaturan default tanpa syarat dapat memiliki efek yang tidak diinginkan. Anda benar-benar bermaksud mengembalikan perilaku seperti sebelumnya. Untuk melakukannya, gunakan #pragma warning(push)/#pragma warning(pop) sebagai gantinya.
IInspectable

29

Tidak secara otomatis, tidak. Anda dapat membuat templat proyek seperti yang disarankan BlueWandered atau membuat lembar properti khusus yang dapat Anda gunakan untuk proyek Anda saat ini dan semua proyek mendatang.

  1. Buka Manajer Properti (Lihat-> Manajer Properti)
  2. Di Manajer Properti Klik kanan pada proyek Anda dan pilih "Tambahkan Lembar Properti Proyek Baru"
  3. Beri nama dan buat di direktori umum. Lembar properti akan ditambahkan ke semua target pembangunan.
  4. Klik kanan pada lembar properti baru dan pilih "Properti". Ini akan membuka properti dan memungkinkan Anda untuk mengubah pengaturan seperti yang Anda lakukan jika Anda mengeditnya untuk suatu proyek.
  5. Pergilah ke "Properti Umum-> C / C ++ -> Preprosesor"
  6. Edit pengaturan "Definisi Preprocessor" dan tambahkan _CRT_SECURE_NO_WARNINGS.
  7. Simpan dan Anda selesai.

Sekarang kapan pun Anda membuat proyek baru, tambahkan lembar properti ini seperti ...

  1. Buka Manajer Properti (Lihat-> Manajer Properti)
  2. Di Manajer Properti Klik kanan pada proyek Anda dan pilih "Tambahkan Lembar Properti Proyek yang Ada"

Manfaatnya di sini adalah Anda tidak hanya mendapatkan satu tempat untuk mengelola pengaturan umum tetapi setiap kali Anda mengubah pengaturan mereka disebarkan ke SEMUA proyek yang menggunakannya. Ini berguna jika Anda memiliki banyak pengaturan suka _CRT_SECURE_NO_WARNINGSatau pustaka seperti Boost yang ingin Anda gunakan dalam proyek Anda.


Itu luar biasa. Saya tidak percaya saya tidak pernah menemukan Manajer Properti sampai hari ini.
James Johnston

20

Semua solusi di sini gagal bekerja pada VS2013 saya, namun saya meletakkannya #define _CRT_SECURE_NO_WARNINGSdi stdafx.h sebelum #pragma oncedan semua peringatan ditekan. Catatan: Saya hanya kode untuk keperluan prototipe untuk mendukung penelitian saya, jadi pastikan Anda memahami implikasi dari metode ini saat menulis kode Anda.

Semoga ini membantu


1
Dimana stdafx.hlokasinya?
SomethingSomething

1
Bagi mereka yang tidak tahu, itu harus didefinisikan sebagai 1, seperti ini: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

dua sen saya untuk VS 2017:

Saya bisa mengonfirmasi itu bekerja di stdafx.h keduanya dalam gaya ini:

Sebuah)

#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

(Saya telah menambahkan definisi lain untuk panggilan jaringan MSDN ..) Tentu saja saya lebih suka a).

Saya dapat mengonfirmasi bahwa: #define _CRT_SECURE_NO_WARNINGS (tanpa nilai) TIDAK BEKERJA.

PS titik sebenarnya adalah untuk menempatkan ini SEBELUM deklarasi fungsi, yaitu sebelum *. H


Bekerja di Visual Studio 2010 juga.
ebyrob

8

cukup salin " _CRT_SECURE_NO_WARNINGS " rekatkan pada proyek-> properties-> c / c ++ -> preprocessor-> definisi preprocessor klik ok.it akan berfungsi


0

Jika proyek Anda tidak menggunakan stdafx.h, Anda bisa meletakkan baris berikut sebagai baris pertama dalam file .cpp Anda dan peringatan kompiler harus pergi - setidaknya itu bagi saya di Visual Studio C ++ 2008.

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

Tidak masalah memiliki komentar dan baris kosong di depan mereka.


0

Meskipun Anda dapat menambahkan _CRT_SECURE_NO_WARNINGS ke Properti proyek Anda, cara termudah adalah menggunakan stdafx.h untuk segala jenis penonaktifan peringatan dan kesalahan, pastikan Anda menempatkan baris berikut (dan yang serupa) SEBELUM

#pragma once

Juga tidak perlu mendefinisikan nilai (yaitu "1") untuk _CRT_SECURE_NO_WARNINGS selama itu ditentukan. Jadi seharusnya terlihat seperti ini:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

Ini salah. Perintah tidak membuat perbedaan. Sama sekali. Saya berasumsi bahwa Anda tidak pernah menjelaskan, mengapa ini perlu, karena tidak ada alasan.
IInspectable

Ini bukan masalah "pesanan", cukup periksa dua kali: jika Anda menempatkan #define _CRT_SECURE_NO_WARNINGS setelah #pragma sekali, Anda masih akan mendapatkan kesalahan ini!
Michael Haephrati

Perilaku #pragma onceimplementasi didefinisikan, tetapi mengikuti standar de-facto umum di Visual Studio. Jika itu membuat perbedaan bagi Anda, apakah Anda mendefinisikan simbol preprosesor di depan pragma atau setelahnya, maka Anda memiliki konfigurasi proyek yang rusak (ini dengan asumsi, bahwa Anda - terlalu - menyamakan "header yang dikompilasi sebelumnya" dan "stdafx.h " ).
IInspectable

Apa artinya “konfigurasi proyek yang rusak”? Saya membuat proyek Win32 baru dan menguji kedua skenario.
Michael Haephrati

Silakan lihat dokumentasi resmi untuk mempelajari tentang persyaratan sebenarnya untuk menggunakan simbol preprosesor ini.
IInspectable
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.