抑制警告 C4996:为什么不工作?
Suppressing warning C4996: why not working?
上下文:
我正在玩 Eigen 库的样条拟合模块。
合身效果很好,但我确实收到了一些警告(在 Visual Studio 2013 年)。
问题:
为什么我能够禁用一些警告,而其他警告即使在它们应该被抑制之后仍然存在?
更多上下文:
我收到的 "well behaved" 警告是
warning C4714: function 'const Eigen::Matrix Eigen::DenseBase::eval(void) const' marked as __forceinline not inlined
经过一番研究,我了解到这确实与使用本征代码有关。由于我不想发出警告,
#pragma warning(disable : 4714)
很好地抑制它。
"naughty" 警告是
warning C4996: 'std::_Partial_sum2': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
起源于特征的 ChordLengths 函数。然而,这个并没有让自己被 #pragma warning(disable : 4996)
压制
(而且我很确定间距没有问题,或者上面的 4714 工作得很好),也没有工作
#define _SCL_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
或来自 this 线程或所有其他类似线程的任何内容。
这是为什么呢?我是不是忽略了一些明显的东西?
现在我 'solved' 以一种相当丑陋的方式解决问题:我已将 ChordLengths 函数重写到我的代码中,替换了有问题的行
std::partial_sum(chord_lengths.data(), chord_lengths.data()+n,chord_lengths.data());
用我自己的版本。我不喜欢这种方法,但它解决了问题。不过,我更愿意理解为什么我试图抑制警告没有任何效果。
奖励:我如何真正抑制警告?
感谢 WhozCraig
解决了
解决方案:警告抑制需要放在任何包含之前,因为其中一些显然也包含特征。
@Mori(不好意思,好像我的声望点太少了,来不及评论了!)
对我来说,sprintf(等)警告有问题,#pragma warning(disable : 4996)
需要放在之后 #include "stdafx.h"
上下文: 我正在玩 Eigen 库的样条拟合模块。 合身效果很好,但我确实收到了一些警告(在 Visual Studio 2013 年)。
问题: 为什么我能够禁用一些警告,而其他警告即使在它们应该被抑制之后仍然存在?
更多上下文:
我收到的 "well behaved" 警告是
warning C4714: function 'const Eigen::Matrix Eigen::DenseBase::eval(void) const' marked as __forceinline not inlined
经过一番研究,我了解到这确实与使用本征代码有关。由于我不想发出警告,
#pragma warning(disable : 4714)
很好地抑制它。
"naughty" 警告是
warning C4996: 'std::_Partial_sum2': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'起源于特征的 ChordLengths 函数。然而,这个并没有让自己被
#pragma warning(disable : 4996)压制 (而且我很确定间距没有问题,或者上面的 4714 工作得很好),也没有工作
#define _SCL_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
或来自 this 线程或所有其他类似线程的任何内容。
这是为什么呢?我是不是忽略了一些明显的东西?
现在我 'solved' 以一种相当丑陋的方式解决问题:我已将 ChordLengths 函数重写到我的代码中,替换了有问题的行
std::partial_sum(chord_lengths.data(), chord_lengths.data()+n,chord_lengths.data());
用我自己的版本。我不喜欢这种方法,但它解决了问题。不过,我更愿意理解为什么我试图抑制警告没有任何效果。
奖励:我如何真正抑制警告?
感谢 WhozCraig
解决了解决方案:警告抑制需要放在任何包含之前,因为其中一些显然也包含特征。
@Mori(不好意思,好像我的声望点太少了,来不及评论了!)
对我来说,sprintf(等)警告有问题,#pragma warning(disable : 4996)
需要放在之后 #include "stdafx.h"