作者eleghost (eleghost)
看板C_and_CPP
标题[问题] compiler预先指定变数
时间Thu Dec 10 23:15:38 2009
遇到的问题: (题意请描述清楚)
今天想到一个问题...
struct _table {
int a;
char *b;
int c;
};
struct _table init_table = {
0, "aaa", 1};
我可以用上面的方式当作初始化struct的方式。
但是如果是这样..
struct _table init_table = {
param.hHeight, "aaA", param.hWidth};
这样子虽然编译会过, 但是结果却不是如你所想的...
因为这些值是在compiler时就指定的了, 那因为param.xxx的值是在
runtime才指定的, 所以上面那样的初始方式是错的~
可是我们也常常在初始化时会写
int width = param.hHeight;
这样, 但是这样子结果就是如你所想的...为什麽有时候
compiler会帮你在编一阶段就决定,有时却会留在 runtime
时在决定呢? 谢谢!
开发平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
linux ; gcc4
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.201.105
1F:推 VictorTom:int width = param.hHeight; // width的赋值也是runtime 12/10 23:21
2F:→ VictorTom:才给的啊....@_@" 12/10 23:21
所以
struct _table init_table = {
param.hHeight, "aaA", param.hWidth};
想上面这样子的写法, init_table也可以正确的被赋予初始值罗?
因为我本来是这样写, 但同事是说这样会错误~ 所以想问问...
※ 编辑: eleghost 来自: 59.127.201.105 (12/11 22:51)
3F:推 sunneo:你这东西必须在param比他先初始化的前提 12/12 17:17
4F:→ sunneo:全域变数的初始化 除非param是read-only,否则你不能确定 12/12 17:18
5F:→ sunneo:初始化顺序。不然就是struct _table必须是区域变数 12/12 17:19