即使在定义了_CRT_SECURE_NO_WARNINGS之后,仍然会收到警告4996

时间:2017-11-22 10:43:46

标签: c++ warnings preprocessor

嗨,我一直在努力让我的预处理器退出让我烦恼:

所以我在_CRT_SECURE_NO_WARNINGS

中添加了C/C++ -> preprocessor -> definitions

但它仍然说同样的,所以我在下面定义了它,如下面的代码所示。 虽然它没有用。它在输出中显示为错误,而不是警告。还有什么我应该做的吗?

#include "texture.h"
#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
#include "stb_image.h"
#define STB_IMAGE_IMPLEMENTATION

Texture::Texture(const std::string& fileName)
{
    int width, height, numComponents;
    unsigned char* data = stbi_load((fileName).c_str(), &width, &height, 
    &numComponents, 4);

   //rest isnt really neccesary i guess

3 个答案:

答案 0 :(得分:0)

您需要将#define _CRT_SECURE_NO_WARNINGS放在程序的最开头:

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

int main()
{
  FILE *f = fopen("a", "r");
}

但是,在#define _CRT_SECURE_NO_WARNINGS之后出现#include <iostream>时,会发出警告:

#include <iostream>

#define _CRT_SECURE_NO_WARNINGS

int main()
{
  FILE *f = fopen("a", "r");
}

同样适用于#pragma warning(disable: 4996),你需要把它放在程序的开头(或者至少在#include <iostream>之前)

答案 1 :(得分:-1)

考虑使用

#pragma warning(disable: 4996)

代替。

答案 2 :(得分:-1)

不要定义_CRT_SECURE_NO_WARNINGS或其他警告抑制,这是在升级尚未使用CRT中的安全增强功能的代码时应该使用的解决方法。修复导致它们的代码。