如何使 Visual Studio 2010 警告未使用的变量
How to make Visual Studio 2010 warn about unused variables?
#include <string>
using namespace std;
int main()
{
string s; // no warning
int i; // warning C4101
return 0;
}
- 为什么Visual Studio警告我未使用的变量
i
而不是示例中的s
? - 我假设编译器不确定字符串构造函数的副作用。这是不显示警告的原因吗?
- 我可以以某种方式启用有关未使用的字符串变量的警告吗?
我的警告级别设置为 4。
我假设编译器只警告未使用的变量,用于平凡的可构造/可破坏类型。
template<typename>
struct Empty
{
};
template<typename T>
struct Trivial : Empty<T>
{
int* p;
int i;
};
template<typename>
struct NonTrivial
{
NonTrivial() {}
};
template<typename>
struct TrivialE
{
TrivialE& operator=(const TrivialE&) {}
};
struct NonTrivial2
{
NonTrivial2() {}
};
struct NonTrivialD
{
~NonTrivialD() {}
};
int main()
{
Empty<int> e; // warning
Trivial<int> t; // warning
NonTrivial<int> n; // OK
TrivialE<int> te; // warning
NonTrivial2 n2; // OK
NonTrivialD nd; // OK
}
编译器处理比较
可以看出,它们是一致的。
由于std::string
不可能是微不足道的可破坏的,因此编译器不会对此发出警告。
所以回答你的问题:你不能。
没有警告,因为实际上没有未使用的变量s
。 s
是 string
类的一个实例,这个类有一个构造函数,该构造函数在声明string s;
调用,因此s
由它的构造函数使用。
std::string
不是基元类型,而int
是。非基元类型具有构造函数和析构函数,它们可以执行一些有用的功能:内存管理、输出到屏幕等,因此声明非基元类型并不一定意味着不使用变量。 当然,string
不会做这样的事情,但可能它们会抑制对已知类型的警告,同时考虑到您可能会想出重新细化string
行为的想法(您可以通过编辑一些头文件来做到这一点,因为string
是基于模板类的(。
相关文章:
- 使用typeid警告未使用的变量
- 未使用的C++未优化的静态成员函数/变量
- C++未使用的变量警告,即使我在函数结束时返回它
- 如何使 Visual Studio 2010 警告未使用的变量
- C 20合同和未使用的变量
- 提升::序列化警告未使用的变量file_version
- 未使用的变量禁止打印?
- GCC和Clang不警告未使用的异常变量
- 避免在 openmp 并行块中使用预编译器语句出现未使用的变量警告
- 抑制警告:未使用的变量
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- 如何使用非平凡析构函数防止未使用的变量警告
- 为什么这个未使用的变量没有优化掉?
- 为什么msvc编译器在显式调用析构函数时会发出未使用的变量
- 警告:变量已设置,但未使用
- 检测函数范围之外的未使用变量
- 如何禁止显示有关C++中未使用变量的警告
- C++未使用变量的异常
- 为什么在c++函数中使用void(未使用)(和类似的)而不是没有名称的参数来消除未使用变量的警告
- 如何在Eclipse中禁用未使用变量警告?