Xóa các cảnh báo an toàn (_CRT_SECURE_NO_WARNINGS) khỏi các dự án theo mặc định trong Visual Studio


195

Có cách nào để đặt mặc định cho tất cả các dự án loại bỏ các cảnh báo bảo mật tiền biên dịch xuất hiện khi sử dụng các chức năng như scanf (). Tôi thấy rằng bạn có thể làm điều đó bằng cách thêm một dòng trong tùy chọn dự án hoặc #define _CRT_SECURE_NO_WARNINGSvào đầu mã.

Tôi thấy mình liên tục tạo ra các dự án mới để giải quyết các cuộc thi lập trình và thật sự rất khó chịu (và mất thời gian quý báu) để thêm vào:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

Khi bắt đầu mã, hoặc để đặt nó trong các tùy chọn trình biên dịch trước mỗi khi tôi bắt đầu một dự án mới.


2
Bạn có thể xuất mẫu dự án với _CRT_SECURE_NO_WARNINGS được xác định.
BlueWanderer

Đó có vẻ là một cách giải quyết tốt. Tôi đang nhìn vào nó. Cảm ơn!
Juan Martinez

3
bạn quên số 1 ở cuối #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel

3
@MartijnvanWezel 1 ở cuối là không bắt buộc.
qqqqq

1
@qqqqq Nó sẽ buộc phải là sự thật
Martijn van Wezel

Câu trả lời:


286

Đánh dấu tất cả các dự án mong muốn trong thám hiểm giải pháp.

Nhấn Alt-F7 hoặc nhấp chuột phải vào trình khám phá giải pháp và chọn "Thuộc tính"

Cấu hình: Tất cả các cấu hình

Nhấp vào dòng Định nghĩa tiền xử lý để gọi trình soạn thảo của nó

Chọn chỉnh sửa ...

Sao chép "_CRT_SECURE_NO_WARNINGS" vào hộp trắng Định nghĩa tiền xử lý ở trên cùng.

nhập mô tả hình ảnh ở đây


10
Phần này mô tả cách thêm nó cho một dự án mà tôi nghĩ OP đã biết (mặc dù nó không rõ ràng 100%). Câu hỏi chính là làm thế nào để thêm nó để nó xuất hiện trong tất cả các dự án. Lý tưởng nhất, làm thế nào người ta có thể thêm nó vào macro% (Pre ProcessorDefDefs) để nó được đưa vào mọi nơi?
Rob Gilliam

Đã sửa vào ngày 13 tháng 1 năm 2015.

Điều này chỉ mô tả bước đầu tiên. Khi bạn đã cấu hình mọi thứ theo cách bạn cần, bạn cũng sẽ muốn xuất mẫu dự án (xem Cách: Tạo mẫu dự án để được hướng dẫn).
IInspectable

92

Có thể là do tôi vẫn chưa quen với VS và chắc chắn là mới đối với C, nhưng điều duy nhất cho phép tôi xây dựng là thêm

#pragma warning(disable:4996)

Ở đầu tệp của tôi, lỗi này đã loại bỏ lỗi C4996 mà tôi gặp phải với sprintf

Một chút khó chịu nhưng hoàn hảo cho mã nhỏ của tôi và cho đến nay là dễ nhất.

Tôi đọc về nó ở đây: https://msdn.microsoft.com/en-us/l Library / 2c8f766e.aspx


5
Tôi đã thử mọi biến thể của #define được hiển thị trên trang này (có và không có 1 ở cuối) và chỉ #pragma hoạt động với tôi. (Phiên bản cộng đồng VS2013) Tôi chắc chắn rằng tôi đang thiếu một cái gì đó, nhưng tại một số điểm, bạn chỉ cần nó hoạt động để bạn có thể tiếp tục với nó.
Spike0xff

Có cùng một điều chính xác - nó cảm thấy thật tồi tệ nhưng vào cuối ngày, cũng vậy, nó hoạt động @
Spike0xff

2
Tôi có thể xác nhận _CRT_SECURE_NO_WARNINGS không hoạt động trong VC ++ 2015 nhưng hoạt động ở trên. Cảm ơn!
Shital Shah

@ShitalShah Xác nhận của bạn dựa trên các thử nghiệm cá nhân hoặc một số tài liệu chính thức của Microsoft?
qqqqq

1
@bri: Thiết lập mặc định vô điều kiện có thể có các hiệu ứng không mong muốn. Bạn thực sự có nghĩa là để khôi phục hành vi như trước đây. Để làm điều đó, sử dụng #pragma warning(push)/#pragma warning(pop) thay thế.
IInspectable

29

Không tự động, không. Bạn có thể tạo mẫu dự án như BlueWandered đã đề xuất hoặc tạo trang thuộc tính tùy chỉnh mà bạn có thể sử dụng cho các dự án hiện tại và trong tương lai.

  1. Mở Trình quản lý tài sản (Xem-> Trình quản lý tài sản)
  2. Trong Trình quản lý tài sản Nhấp chuột phải vào dự án của bạn và chọn "Thêm trang thuộc tính dự án mới"
  3. Đặt tên cho nó và tạo nó trong một thư mục chung. Bảng thuộc tính sẽ được thêm vào tất cả các mục tiêu xây dựng.
  4. Nhấp chuột phải vào trang thuộc tính mới và chọn "Thuộc tính". Điều này sẽ mở ra các thuộc tính và cho phép bạn thay đổi các cài đặt giống như bạn sẽ làm nếu bạn đang chỉnh sửa chúng cho một dự án.
  5. Đi vào "Thuộc tính chung-> C / C ++ -> Bộ tiền xử lý"
  6. Chỉnh sửa cài đặt "Định nghĩa tiền xử lý" và thêm _CRT_SECURE_NO_WARNINGS.
  7. Lưu và bạn đã hoàn tất.

Bây giờ bất cứ khi nào bạn tạo một dự án mới, hãy thêm trang thuộc tính này như vậy ...

  1. Mở Trình quản lý tài sản (Xem-> Trình quản lý tài sản)
  2. Trong Trình quản lý tài sản Nhấp chuột phải vào dự án của bạn và chọn "Thêm Bảng thuộc tính dự án hiện có"

Lợi ích ở đây là không chỉ bạn có một nơi duy nhất để quản lý các cài đặt chung mà bất cứ khi nào bạn thay đổi cài đặt, chúng sẽ được truyền tới TẤT CẢ các dự án sử dụng nó. Điều này rất hữu ích nếu bạn có nhiều cài đặt như _CRT_SECURE_NO_WARNINGShoặc thư viện như Boost mà bạn muốn sử dụng trong các dự án của mình.


Thật tuyệt vời. Tôi không thể tin rằng tôi chưa bao giờ phát hiện ra Trình quản lý tài sản cho đến ngày hôm nay.
James Johnston

20

Tất cả các giải pháp ở đây không hoạt động trên VS2013 của tôi, tuy nhiên tôi đã đặt #define _CRT_SECURE_NO_WARNINGSstdafx.h ngay trước khi #pragma oncevà tất cả các cảnh báo bị loại bỏ. Lưu ý: Tôi chỉ mã cho các mục đích tạo mẫu để hỗ trợ nghiên cứu của tôi vì vậy hãy chắc chắn rằng bạn hiểu ý nghĩa của phương pháp này khi viết mã của bạn.

Hi vọng điêu nay co ich


1
Trong trường hợp được stdafx.hđặt ở đâu?
Một cái gì đó

1
Đối với những người không biết, nên được định nghĩa là 1, như thế này: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson 24/07/2015

11

hai xu của tôi cho VS 2017:

Tôi có thể xác nhận nó hoạt động trong stdafx.h cả trong các kiểu này:

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

(Tôi đã thêm một định nghĩa khác cho các cuộc gọi mạng MSDN ..) Tất nhiên tôi thích a).

Tôi có thể xác nhận rằng: #define _CRT_SECURE_NO_WARNINGS (không có giá trị) KHÔNG LÀM VIỆC.

PS, điểm thực sự là đặt các định nghĩa này TRƯỚC các khai báo hàm, tức là trước * .h


Hoạt động trong Visual Studio 2010 là tốt.
ebyrob

8

chỉ cần sao chép " _CRT_SECURE_NO_WARNINGS " dán nó vào dự án- > thuộc tính- > c / c ++ -> tiền xử lý- > định nghĩa tiền xử lý nhấp vào ok.it sẽ hoạt động


0

Nếu dự án của bạn không sử dụng stdafx.h, bạn có thể đặt các dòng sau làm dòng đầu tiên trong tệp .cpp của mình và cảnh báo trình biên dịch sẽ biến mất - ít nhất là nó đã làm cho tôi trong Visual Studio C ++ 2008.

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

Bạn có thể bình luận và bỏ trống trước họ.


0

Mặc dù bạn có thể thêm _CRT_SECURE_NO_WARNINGS vào Thuộc tính của dự án, cách dễ nhất là sử dụng stdafx.h cho bất kỳ loại cảnh báo và vô hiệu hóa lỗi nào, chỉ cần đảm bảo bạn đặt dòng sau (và tương tự) TRƯỚC

#pragma once

Ngoài ra, không cần xác định giá trị (tức là "1") cho _CRT_SECURE_NO_WARNINGS miễn là nó được xác định. Vì vậy, nó sẽ trông như thế này:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

Điều này là không đúng. Thứ tự không tạo ra sự khác biệt. Ở tất cả. Tôi cho rằng bạn không bao giờ giải thích, tại sao điều này lại cần thiết, bởi vì không có lý do.
IInspectable

Đây không phải là vấn đề "đặt hàng", chỉ cần kiểm tra hai lần: nếu bạn đặt #define _CRT_SECURE_NO_WARNINGS sau #pragma một lần, bạn vẫn sẽ gặp lỗi này!
Michael Haephrati

Hành vi của #pragma onceđược xác định theo triển khai, nhưng tuân theo tiêu chuẩn thực tế chung trong Visual Studio. Nếu nó tạo ra sự khác biệt cho bạn, cho dù bạn đã xác định biểu tượng tiền xử lý trước pragma hay sau nó, thì bạn có một cấu hình dự án bị hỏng (điều này giả sử rằng, bạn đang - đánh đồng "các tiêu đề được biên dịch trước""stdafx.h" " ).
IInspectable

Ý nghĩa của cấu hình dự án bị phá vỡ là gì? Tôi đã tạo một dự án Win32 mới và thử nghiệm cả hai kịch bản.
Michael Haephrati

Xin vui lòng xem tài liệu chính thức để tìm hiểu về các yêu cầu thực sự khi sử dụng biểu tượng tiền xử lý này.
IInspectable
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.