Remova os avisos seguros (_CRT_SECURE_NO_WARNINGS) dos projetos por padrão no Visual Studio


195

Existe uma maneira de definir por padrão para todos os projetos, removendo os avisos seguros do pré-compilador que surgem ao usar funções como scanf (). Descobri que você pode fazer isso adicionando uma linha na opção do projeto ou uma #define _CRT_SECURE_NO_WARNINGSno início do código.

Eu me pego criando repetidamente novos projetos para resolver concursos de programação e é realmente irritante (e leva um tempo valioso) acrescentar:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

No início do código, ou para configurá-lo nas opções de pré-compilador toda vez que inicio um novo projeto.


2
Você pode exportar um modelo de projeto com _CRT_SECURE_NO_WARNINGS definido.
— BlueWanderer

Isso parece ser uma boa solução alternativa. Eu estou olhando para isso. Obrigado!
— Juan Martinez

3
você esquece o 1 no final #define _CRT_SECURE_NO_WARNINGS 1
— Martijn van Wezel

3
@MartijnvanWezel 1 no final não é necessário.
— Qqqqq

1
@qqqqq Será forçado a ser verdade #
— Martijn van Wezel

Respostas:


286

Marque todos os projetos desejados no Solution Explorer.

Pressione Alt-F7 ou clique com o botão direito do mouse no Solution Explorer e selecione "Propriedades"

Configurações: Todas as configurações

Clique na linha Definições do pré-processador para chamar seu editor

Escolha Editar ...

Copie "_CRT_SECURE_NO_WARNINGS" na caixa branca Definições de pré-processador na parte superior.

insira a descrição da imagem aqui


10
Isso descreve como adicioná-lo a um projeto que eu acho que o OP já conhece (embora não seja 100% claro). A questão principal é como adicioná-lo para que apareça em todos os projetos. Idealmente, como se pode adicioná-lo à macro% (PreprocessorDefinitions) para que seja incluída em qualquer lugar?
— Rob Gilliam

Corrigido em 13 de janeiro de 2015.

Isso descreve apenas o primeiro passo. Depois de configurar tudo da maneira que você precisa, você também desejará exportar um modelo de projeto (consulte Como: criar modelos de projeto para obter instruções).
— IInspectable

92

Pode ter sido porque eu ainda sou novo no VS e definitivamente novo no C, mas a única coisa que me permitiu criar foi adicionar

#pragma warning(disable:4996)

Na parte superior do meu arquivo, isso suprimia o erro C4996 que eu estava recebendo com o sprintf

Um pouco chato, mas perfeito para o meu pequeno pedaço de código e de longe o mais fácil.

Eu li sobre isso aqui: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
Tentei todas as variações de #define mostradas nesta página (com e sem o 1 no final) e apenas o #pragma funcionou para mim. (Edição da comunidade VS2013) Tenho certeza de que estou perdendo alguma coisa, mas em algum momento, você só precisa funcionar para poder continuar.
— Spike0xff 01/12/2015

Tinha exatamente a mesma coisa - que se sente uma merda, mas no final do dia, bem f ***, ele funciona @ Spike0xff
— Shaun314

2
Posso confirmar que _CRT_SECURE_NO_WARNINGS não funciona no VC ++ 2015, mas acima funciona. Obrigado!
— Shital Shah

@ShitalShah A sua confirmação está baseada em experiências pessoais ou em alguma documentação oficial da Microsoft?
— Qqqqq

1
@bri: Definir incondicionalmente o padrão pode ter efeitos indesejados. Você realmente pretendia restaurar o comportamento ao que era antes. Para fazer isso, use #pragma warning(push)/ em#pragma warning(pop) vez disso.
— IInspectable

29

Não automaticamente, não. Você pode criar um modelo de projeto como o BlueWandered sugeriu ou criar uma folha de propriedades personalizada que você pode usar para seus projetos atuais e todos os futuros.

  1. Abra o Gerenciador de propriedades (Exibir-> Gerenciador de propriedades)
  2. No Gerenciador de propriedades, clique com o botão direito do mouse no seu projeto e selecione "Adicionar nova folha de propriedades do projeto"
  3. Dê um nome a ele e crie-o em um diretório comum. A folha de propriedades será adicionada a todos os destinos de criação.
  4. Clique com o botão direito na nova folha de propriedades e selecione "Propriedades". Isso abrirá as propriedades e permitirá que você altere as configurações como faria se as estivesse editando para um projeto.
  5. Vá em "Propriedades Comuns-> C / C ++ -> Pré-processador"
  6. Edite a configuração "Definições do pré-processador" e adicione _CRT_SECURE_NO_WARNINGS.
  7. Salve e pronto.

Agora, sempre que você criar um novo projeto, adicione esta folha de propriedades da seguinte maneira ...

  1. Abra o Gerenciador de propriedades (Exibir-> Gerenciador de propriedades)
  2. No Gerenciador de propriedades, clique com o botão direito do mouse no seu projeto e selecione "Adicionar folha de propriedades do projeto existente"

O benefício aqui é que você não apenas obtém um único local para gerenciar configurações comuns, mas sempre que altera as configurações, elas são propagadas para TODOS os projetos que a utilizam. Isso é útil se você tiver muitas configurações, como _CRT_SECURE_NO_WARNINGSbibliotecas, como o Boost, que deseja usar em seus projetos.


Fantástico. Não acredito que nunca descobri o gerente de propriedade até hoje.
— James Johnston

20

Todas as soluções aqui falharam no meu VS2013, no entanto, coloquei o arquivo #define _CRT_SECURE_NO_WARNINGSstdafx.h antes do#pragma once todos os avisos serem suprimidos. Nota: Eu codifico apenas para fins de prototipagem para apoiar minha pesquisa. Portanto, certifique-se de entender as implicações desse método ao escrever seu código.

Espero que isto ajude


1
Onde está stdafx.hlocalizado?
— SomethingSomething

1
Para aqueles que não sabem, ele deve ser definido como 1, como este: _CRT_SECURE_NO_WARNINGS #define 1
— kirk.burleson

11

meus dois centavos para o VS 2017:

Posso confirmar que funciona no stdafx.h nos dois estilos:

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

(Adicionei outra definição para chamadas de rede MSDN.) É claro que prefiro a).

Posso confirmar que: #define _CRT_SECURE_NO_WARNINGS (sem um valor) NÃO FUNCIONA.

PS: o ponto real é colocar essas definições ANTES das declarações de funções, ou seja, antes de * .h


Funciona no Visual Studio 2010 também.
— Ebyrob 7/11

8

basta copiar " _CRT_SECURE_NO_WARNINGS " cole-o em projetos-> propriedades-> c / c ++ -> pré-processador-> definições de pré-processador clique em ok. isso funcionará


0

Se o seu projeto não usa stdafx.h, você pode colocar as seguintes linhas como as primeiras linhas no arquivo .cpp e o aviso do compilador deve desaparecer - pelo menos para mim no Visual Studio C ++ 2008.

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

Não há problema em ter comentários e linhas em branco diante deles.


0

Mesmo que você possa adicionar _CRT_SECURE_NO_WARNINGS às propriedades do seu projeto, a maneira mais fácil é usar stdafx.h para qualquer tipo de aviso e desativação de erro, apenas certifique-se de colocar a seguinte linha (e semelhante) ANTES

#pragma once

Também não há necessidade de definir um valor (por exemplo, "1") para _CRT_SECURE_NO_WARNINGS, desde que definido. Portanto, deve ficar assim:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

Isto está incorreto. O pedido não faz diferença. Em absoluto. Suponho que você nunca tenha explicado por que isso era necessário, porque não há razão.
— IInspectable

Não se trata de "ordem", basta verificar duas vezes: se você colocar #define _CRT_SECURE_NO_WARNINGS após #pragma uma vez, você ainda receberá esse erro!
— Michael Haephrati

O comportamento de #pragma onceé definido pela implementação, mas segue o padrão de fato comum no Visual Studio. Se faz alguma diferença para você, se você definiu o símbolo do pré-processador antes ou depois do pragma, então você tem uma configuração de projeto quebrada (isso pressupõe que você esteja - indevidamente - equiparando "cabeçalhos pré-compilados" e "stdafx.h " ).
— IInspectable

Qual é o significado de "configuração de projeto interrompida"? Criei um novo projeto Win32 e testei os dois cenários.
— Michael Haephrati

Por favor, dê uma olhada na documentação oficial para aprender sobre os verdadeiros requisitos para usar este símbolo do pré-processador.
— IInspectable
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.