详解警告“unreferenced local variable”
来源:互联网 发布:unity3d 粒子系统瀑布 编辑:程序博客网 时间:2024/04/30 22:39
在编译C++程序时,我们有时候遇到这样的警告
warning C4101: 'x1' : unreferenced local variable
原因剖析:
在C99之前,C语言要求要求必须在一个程序块的左括号一开始就定义好所有的变量,所有C编译器会在程序块的开头就分配了所有的内存,所以C++编译器也延续了这样的处理方式,程序块的开头就分配所有的内存,但虽然变量的空间已经分配好了,在变量定义(构造函数被调用)之前我们还是无法访问这块存储空间的(即该对象)
在上述的代码中,if\switch\goto语句都有可能导致跳过构造函数调用的序列点,这会导致为某个变量分配了内存空间,但最终变量却没有定义(初始化),编译器为了保证“产生”的对象都会被初始化,就给出了警告信息“unreferenced local variable”
warning C4101: 'x1' : unreferenced local variable
下面是一个会出现上述警告的简单例子:
using namespace std;class X{};int main(){int i;cin >> i;if(i){X a;}return 1;}接下来是一个稍微复杂点的例子:
#include <iostream>using namespace std;class X{};void f(int i){if(i<10)goto jump1;X x1;jump1:switch(i){case 1: X x2; break;case 2: X x3; break;}}int main(){f(1);return 1;}
这个程序会给出如下警告信息:
: warning C4101: 'x1' : unreferenced local variable
: warning C4101: 'x2' : unreferenced local variable
: warning C4101: 'x3' : unreferenced local variable
我们的程序没有逻辑错误,为什么编译器会给出这样的警告信息呢?这个警告信息是在提示什么呢?这是很多人可能会疑问的
原因剖析:
在C99之前,C语言要求要求必须在一个程序块的左括号一开始就定义好所有的变量,所有C编译器会在程序块的开头就分配了所有的内存,所以C++编译器也延续了这样的处理方式,程序块的开头就分配所有的内存,但虽然变量的空间已经分配好了,在变量定义(构造函数被调用)之前我们还是无法访问这块存储空间的(即该对象)
在上述的代码中,if\switch\goto语句都有可能导致跳过构造函数调用的序列点,这会导致为某个变量分配了内存空间,但最终变量却没有定义(初始化),编译器为了保证“产生”的对象都会被初始化,就给出了警告信息“unreferenced local variable”
- 详解警告“unreferenced local variable”
- 消除unreferenced local variable警告
- 学习笔记—— unreferenced local variable
- warning C280: 'LampN': unreferenced local variable
- 出警告:warning c280:'a' :unreferenced local variable
- 警告:returning pointer to local variable
- 警告:returning pointer to local variable
- Local declaration of tableview hides instance variable 警告
- 警告Local declaration of 'tableView' hides instance variable
- C编译出现这样的警告:returning pointer to local variable
- global variable and local variable
- Duplicate local variable sql
- Duplicate local variable context
- Duplicate local variable studentname
- Duplicate local variable message
- python local variable
- Duplicate local variable btn
- Duplicate local variable session
- QtCreator + QT + VTK in Linux
- qt4 定时器
- 11.27
- 学习资源
- qt4 消息映射--信号 槽
- 详解警告“unreferenced local variable”
- [对比]Android的差异设计和iOS的统一设计规范
- 二叉查找树(binary search tree)的实现算法分析
- 三十六计之攻战计
- Oracle存储过程的格式
- 快考单片机了。。
- vb多线程
- C++编程对缓冲区的理解
- load convert命令实例详解