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.