Debug日志:一个关于“全局变量”的常见错误
2017-07-11 19:14
363 查看
昨天学习了八皇后问题,我就想:能不能写一个N皇后问题的程序呢?首先要定义一个全局变量N,然后其他变量根据N做出相应调整。结果却调了一晚上都没调出来。今天下午,我设计了几行测试代码,把与N相关的几个变量的最终值输出,结果令我大吃一惊:那几个变量根本就没有随N的变化而变化。为了验证我的猜想,我又单独设计了如下测试代码:
测试结果如下:
Normalize变量居然没有随N变化!而其结果为1让我猜测定义全局变量时,N被默认为0了。于是修改测试代码如下:
果然验证了我的猜想!
于是再次修改测试代码:
结论:
1,全局变量在定义时若未被赋初值,则被默认置为0——至少我的编辑环境Devcpp是如此。
2,全局变量在定义时不能连环嵌套定义,只能赋常数值。
3,若需要对全局变量进行关联,则只能在主函数中通过表达式进行设置。
#include <iostream> using namespace std; int N; int Normalize = N + 1; int main() { cout << "请输入N:"; cin >> N; cout << "N = " << N << endl; cout << "Normalize = " << Normalize << endl; return 0; }
测试结果如下:
Normalize变量居然没有随N变化!而其结果为1让我猜测定义全局变量时,N被默认为0了。于是修改测试代码如下:
#include <iostream> using namespace std; int N; int Normalize = N + 3; int main() { cout << "请输入N:"; cin >> N; cout << "N = " << N << endl; cout << "Normalize = " << Normalize << endl; return 0; }测试结果:
果然验证了我的猜想!
于是再次修改测试代码:
#include <iostream> using namespace std; int N; int Normalize; int main() { cout << "请输入N:"; cin >> N; Normalize = N + 1; cout << "N = " << N << endl; cout << "Normalize = " << Normalize << endl; return 0; }这次得到了想要的结果:
结论:
1,全局变量在定义时若未被赋初值,则被默认置为0——至少我的编辑环境Devcpp是如此。
2,全局变量在定义时不能连环嵌套定义,只能赋常数值。
3,若需要对全局变量进行关联,则只能在主函数中通过表达式进行设置。
相关文章推荐
- 关于dll调用的一个常见错误
- 关于android的一个常见错误:Unable to add window --token is not valid; is your activity running?
- C++学习笔记,关于一个文件中的全局变量在其他文件中的使用
- 常见错误3:全局变量----读书笔记C++ Gotchas
- 关于Android的一个常见错误:Unable to add window
- 今天修了一个bug,关于debug日志的问题
- 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege
- 关于局部变量隐藏全局变量的必须注意的小错误
- 关于asp.net中的一个常见错误:Access denied
- 两个cpp文件调用同一个h文件,出现全局变量多次定义错误!
- 一个有关全局变量引发的错误。
- 添加一个自己遇到的无法在debug查看自定义变量的错误
- 关于全局变量的一个问题
- 关于纠正 C/C++ 之前在函输内改变 变量的一个错误想法。
- 关于android的一个常见错误:Unable to add window token null is not for an application
- ALERT日志中常见监听相关报错之中的一个:ORA-609错误的排查
- 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege
- 关于闭包一个常见的错误
- 一个全局变量的编译错误引出的思考
- 一个关于静态局部变量以及全局变量的例子