विज़ुअल स्टूडियो में डिफ़ॉल्ट रूप से प्रोजेक्ट्स से सुरक्षित चेतावनी (_CRT_SECURE_NO_WARNINGS) निकालें


195

वहाँ सभी तरह के precompiler सुरक्षित चेतावनी है कि स्कैनफ () जैसे कार्यों का उपयोग करते समय आने वाले को हटाने के लिए डिफ़ॉल्ट रूप से सेट करने का एक तरीका है। मैंने पाया कि आप इसे प्रोजेक्ट विकल्प में एक लाइन या #define _CRT_SECURE_NO_WARNINGSकोड की शुरुआत में जोड़कर कर सकते हैं ।

मैं खुद को बार-बार प्रोग्रामिंग प्रतियोगिताओं को हल करने के लिए नई परियोजनाएं बनाता हूं और यह वास्तव में कष्टप्रद है (और बहुमूल्य समय लगता है):

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

कोड की शुरुआत में, या हर बार जब मैं एक नई परियोजना शुरू करता हूं, तो इसे प्री-कंपाइलर विकल्पों में सेट करना होगा।


2
आप परिभाषित किए गए _CRT_SECURE_NO_WARNINGS के साथ एक प्रोजेक्ट टेम्पलेट निर्यात कर सकते हैं।
ब्लूवेंडर

यह एक अच्छा वर्कअराउंड की तरह लगता है। मैं इसमें देख रहा हूं। धन्यवाद!
जुआन मार्टिनेज़

3
आप अंत #define _CRT_SECURE_NO_WARNINGS पर 1 1 मत भूलना
मार्टिन वैन Wezel

3
अंत में @MartijnvanWezel 1 की आवश्यकता नहीं है।
qqqqq

1
@qqqqq यह सच होने के लिए मजबूर करेगा
Martijn van Wezel

जवाबों:


286

समाधान एक्सप्लोरर में सभी वांछित परियोजनाओं को चिह्नित करें।

Alt-F7 दबाएं या समाधान एक्सप्लोरर में राइट क्लिक करें और "गुण" चुनें

कॉन्फ़िगरेशन: सभी कॉन्फ़िगरेशन

इसके संपादक को आमंत्रित करने के लिए प्रीप्रोसेसर परिभाषाएँ रेखा पर क्लिक करें

संपादन चुनें ...

शीर्ष पर प्रीप्रोसेसर परिभाषाएँ सफ़ेद बॉक्स में "_CRT_SECURE_NO_WARNINGS" कॉपी करें।

यहां छवि विवरण दर्ज करें


10
यह वर्णन करता है कि इसे एक परियोजना के लिए कैसे जोड़ा जाए जो मुझे लगता है कि ओपी पहले से जानता है (हालांकि यह 100% स्पष्ट नहीं है)। महत्वपूर्ण सवाल यह है कि इसे कैसे जोड़ा जाए ताकि यह सभी परियोजनाओं में दिखाई दे। आदर्श रूप से, कोई इसे% (PreprocessorDefinitions) मैक्रो में कैसे जोड़ सकता है ताकि यह हर जगह शामिल हो जाए?
रोब गिलियम

13 जनवरी 2015 को निर्धारित किया गया था

यह केवल पहले चरण का वर्णन करता है। एक बार जब आप अपनी ज़रूरत के अनुसार सब कुछ कॉन्फ़िगर कर लेते हैं, तो आप एक प्रोजेक्ट टेम्प्लेट को भी निर्यात करना चाहेंगे (देखें कि कैसे करें: निर्देशों के लिए प्रोजेक्ट टेम्प्लेट बनाएं )।
IInspectable

92

यह हो सकता है क्योंकि मैं अभी भी वीएस के लिए नया हूं और निश्चित रूप से सी के लिए नया हूं, लेकिन केवल एक चीज जिसने मुझे निर्माण करने की अनुमति दी थी, वह थी

#pragma warning(disable:4996)

मेरी फ़ाइल के शीर्ष पर, इसने C4996 त्रुटि को दबा दिया जो मुझे स्प्रिंटफ के साथ मिल रहा था

कोड के मेरे छोटे से बिट के लिए और अब तक सबसे आसान है, लेकिन थोड़ा परेशान।

मैंने इसके बारे में यहाँ पढ़ा: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
मैंने इस पृष्ठ पर दिखाए गए #define के प्रत्येक रूपांतर को (अंत में 1 के साथ और बिना) दिखाया और केवल # प्रागमा ने मेरे लिए काम किया। (VS2013 सामुदायिक संस्करण) मुझे यकीन है कि मैं कुछ याद कर रहा हूं, लेकिन कुछ बिंदु पर, आपको बस काम करने की आवश्यकता है ताकि आप इसके साथ मिल सकें।
Spike0xff

ठीक यही बात थी - यह चमकदार लगता है, लेकिन दिन के अंत में, अच्छी तरह से च *** यह, यह @ Spike0xff काम करता है
Shaun314

2
मैं पुष्टि कर सकता हूं कि _CRT_SECURE_NO_WARNINGS VC ++ 2015 में काम नहीं करता है लेकिन ऊपर काम करता है। धन्यवाद!
शीतल शाह

@ShitalShah व्यक्तिगत प्रयोगों या कुछ आधिकारिक Microsoft दस्तावेज़ों के आधार पर आपकी पुष्टि है?
क़ुक्क़्क़

1
@bri: बिना शर्त डिफ़ॉल्ट रूप से सेट करने से अनचाहे प्रभाव पड़ सकते हैं। आप वास्तव में व्यवहार को बहाल करने के लिए थे जो पहले था। ऐसा करने के लिए, का उपयोग करें #pragma warning(push)/#pragma warning(pop) बजाय।
IInspectable

29

स्वचालित रूप से नहीं, नहीं। आप एक प्रोजेक्ट टेम्पलेट बना सकते हैं जैसा कि BlueWandered ने सुझाव दिया है या एक कस्टम प्रॉपर्टी शीट बना सकते हैं जिसे आप अपने वर्तमान और भविष्य की सभी परियोजनाओं के लिए उपयोग कर सकते हैं।

  1. संपत्ति प्रबंधक खोलें (देखें-> संपत्ति प्रबंधक)
  2. संपत्ति प्रबंधक में अपनी परियोजना पर राइट क्लिक करें और "नई परियोजना संपत्ति शीट जोड़ें" चुनें
  3. इसे एक नाम दें और एक सामान्य निर्देशिका में बनाएं। सभी निर्माण लक्ष्यों के लिए संपत्ति शीट को जोड़ा जाएगा।
  4. नई संपत्ति शीट पर राइट क्लिक करें और "गुण" चुनें। यह गुण खोलेगा और आपको सेटिंग्स को बदलने की अनुमति देगा जैसे आप एक परियोजना के लिए उन्हें संपादित कर रहे थे।
  5. "सामान्य गुण-> C / C ++ -> Preprocessor" में जाएं
  6. "प्रीप्रोसेसर परिभाषाएँ" सेटिंग को संपादित करें और जोड़ें _CRT_SECURE_NO_WARNINGS
  7. बचाओ और तुम हो गए।

अब जब भी आप कोई नया प्रोजेक्ट बनाते हैं, तो इस प्रॉपर्टी शीट को इस तरह जोड़ें ...

  1. संपत्ति प्रबंधक खोलें (देखें-> संपत्ति प्रबंधक)
  2. संपत्ति प्रबंधक में अपनी परियोजना पर राइट क्लिक करें और "मौजूदा परियोजना संपत्ति शीट जोड़ें" चुनें

यहाँ लाभ यह है कि न केवल आपको सामान्य सेटिंग्स को प्रबंधित करने के लिए एक ही स्थान मिलता है, बल्कि कभी-कभी आप उन सेटिंग्स को बदलते हैं जो उन्हें उन सभी परियोजनाओं के लिए प्रचारित करती हैं जो इसका उपयोग करते हैं। यह आसान है यदि आपके पास _CRT_SECURE_NO_WARNINGSबूस्ट जैसी बहुत सी सेटिंग्स हैं या बूस्ट जैसे कि आप अपनी परियोजनाओं में उपयोग करना चाहते हैं।


वह तो कमाल है। मुझे विश्वास नहीं हो रहा है कि मैंने आज तक कभी भी प्रॉपर्टी मैनेजर की खोज नहीं की है।
जेम्स जॉन्सटन

20

यहां सभी समाधान मेरे VS2013 पर काम करने में विफल रहे, हालांकि मैंने stdafx.h में डाल दिया और #define _CRT_SECURE_NO_WARNINGSइससे पहले कि #pragma onceसभी चेतावनियों को दबा दिया गया था। नोट: मैं केवल अपने शोध का समर्थन करने के लिए प्रोटोटाइप उद्देश्यों के लिए कोड बनाता हूं ताकि कृपया सुनिश्चित करें कि आप अपना कोड लिखते समय इस पद्धति के निहितार्थ को समझें।

उम्मीद है की यह मदद करेगा


1
कहाँ stdafx.hस्थित है?
someSomething

1
जो लोग नहीं जानते हैं, उन्हें 1 के रूप में परिभाषित किया जाना चाहिए: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

2017 के लिए मेरे दो सेंट:

मैं इन दोनों शैलियों में stdafx.h में काम करने की पुष्टि कर सकता हूं:

ए)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

ख)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(मैंने MSDN नेटवर्क कॉल के लिए एक और परिभाषित जोड़ा है ..) बेशक मैं पसंद करता हूँ a)।

मैं पुष्टि कर सकता है कि: #define _CRT_SECURE_NO_WARNINGS (एक मूल्य के बिना) करता नहीं काम।

पुनश्च असली बात यह है कि इन कार्यों की घोषणाओं को पहले .h .h से पहले रखा जाए


विजुअल स्टूडियो 2010 में भी काम करता है।
ebyrob

8

बस कॉपी करें " _CRT_SECURE_NO_WARNINGS " इसे प्रोजेक्ट्स पर पेस्ट करें- > गुण-> c / c ++ -> प्रीप्रोसेसर-> प्रीप्रोसेसर परिभाषाएँ क्लिक करें। यह काम करेगा


0

यदि आपकी परियोजना stdafx.h का उपयोग नहीं करती है, तो आप निम्न पंक्तियों को अपनी .cpp फ़ाइल में पहली पंक्तियों के रूप में रख सकते हैं और संकलक चेतावनी को दूर जाना चाहिए - कम से कम यह मेरे लिए Visual Studio C ++ 2008 में हुआ था।

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

उनके सामने टिप्पणी और रिक्त लाइनें रखना ठीक है।


0

भले ही आप अपनी परियोजना के गुणों में _CRT_SECURE_NO_WARNINGS जोड़ सकते हैं , किसी भी प्रकार की चेतावनी और त्रुटि को अक्षम करने के लिए stdafx.h का उपयोग करना सबसे आसान तरीका है, बस यह सुनिश्चित करें कि आप निम्न पंक्ति (समान) लगाते हैं

#pragma once

जब तक यह परिभाषित किया जाता है तब तक _CRT_SECURE_NO_WARNINGS के लिए कोई मान (यानी "1") परिभाषित करने की आवश्यकता नहीं है। तो यह इस तरह दिखना चाहिए:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

यह गलत है। आदेश से फर्क नहीं पड़ता। बिल्कुल भी। मैं मान रहा हूं कि आपने कभी समझाया नहीं, यह क्यों जरूरी था, क्योंकि कोई कारण नहीं है।
IInspectable

यह "ऑर्डर" का मामला नहीं है, बस डबल चेक किया गया है: यदि आपने #pragma के बाद #define _CRT_SECURE_NO_WARNINGS एक बार लगा दिया, तो भी आपको यह त्रुटि मिलेगी!
माइकल हेफ़रती

#pragma onceकार्यान्वयन-परिभाषित का व्यवहार है, लेकिन विज़ुअल स्टूडियो में सामान्य डी-वास्तविक मानक का पालन करता है। यदि यह आपके लिए एक अंतर बनाता है, चाहे आपने प्रागमा के आगे या उसके बाद प्रीप्रोसेसर प्रतीक को परिभाषित किया है, तो आपके पास एक टूटा हुआ प्रोजेक्ट कॉन्फ़िगरेशन है (यह मानकर चल रहा है, कि आप "पूर्वनिर्धारित हेडर" और "stdafx.h " के समान हैं )।
IInspectable

"टूटी परियोजना विन्यास" का क्या अर्थ है? मैंने एक नया Win32 प्रोजेक्ट बनाया और दोनों परिदृश्यों का परीक्षण किया।
माइकल हेफ़रती

कृपया इस प्रीप्रोसेसर प्रतीक का उपयोग करने के लिए वास्तविक आवश्यकताओं के बारे में जानने के लिए आधिकारिक दस्तावेज पर एक नज़र डालें ।
द्वितीयांश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.