static const 成员变量定义在头文件里,打开哪个编译选项,可以在每次修改其值的时候编译

20 views
Skip to first unread message

Nan Hu

unread,
Dec 26, 2009, 3:04:32 PM12/26/09
to pon...@googlegroups.com
前几天看一个项目,发现一点以前没接触的情况.
平台是vs2003
代码大致如下

xxxx.h

class A
{
static const int _Anyone_    =0x01;

void foo();
}

xxxx.cpp

void A::foo()
{
int a=_Anyone_;
}

当修改_Anyone_ 的值的时候,比如改成:static const int _Anyone_    =0x02;
必须rebuild才可以.否则DEBUG的时候,a还是等于0x01;

由于这个项目类似的代码很多,所以不打算修改定义.不知道有没有好的办法,比如打开某个编译选项,可以每次修改_Anyone_ 之后,不用rebuild

Shuo Chen

unread,
Dec 27, 2009, 12:18:51 AM12/27/09
to TopLanguage
改成
xxxx.h

class A
{
static int _Anyone_;
};

xxxx.cpp
int A::_Anyone_ = 0x01;

Nan Hu

unread,
Dec 27, 2009, 6:51:45 PM12/27/09
to pon...@googlegroups.com
谢谢你.
就是因为定义在头文件里的静态常量太多,修改1是很麻烦,2是担心出错.
所以才向大家问问有没有好的办法.

2009/12/27 Shuo Chen <gian...@gmail.com>

sagasw

unread,
Dec 27, 2009, 9:10:46 PM12/27/09
to pon...@googlegroups.com
如果想修改不用rebuild,那就最好是把这些参数值存放在程序外边,
配置文件、注册表、数据库之类都是可以利用的。
要么你就直接二进制修改这个exe或者dll文件,嘿嘿。

------------------------------------
C++, Lua, living in Dalian
http://sunxiunan.com/
http://twitter.com/sagasw
------------------------------------


2009/12/27 Nan Hu <huna...@gmail.com>

Dbger

unread,
Dec 27, 2009, 9:25:18 PM12/27/09
to pon...@googlegroups.com
我觉得Suo Chen给出的答案已经符合你的要求了啊,在头文件中声明,cpp中定义


技术博客:http://debuggingnow.com
我的豆瓣:http://www.douban.com/people/baiyanhuang/


2009/12/28 sagasw <sag...@gmail.com>

taodm

unread,
Dec 28, 2009, 12:18:29 AM12/28/09
to TopLanguage
这样将貌似触发gcc4.4下可能会把_Anyone_当作0处理。反正我这么遭遇了gcc4.4+wxString bug。

ChenMing

unread,
Dec 28, 2009, 2:04:52 AM12/28/09
to pon...@googlegroups.com
这个应该是Make时的依赖关系没有做好吧,如果依赖关系正确的话, xxxx.h 改变的话,所有包含它的 .cpp 都会从新编译的。

MS的东西不清楚,在Gcc下,就可以通过 gcc -MM 来导出 .cpp 的依赖关系的。

2009/12/27 Nan Hu <huna...@gmail.com>:

--
Regards.
Chen Ming

Xpol Wan

unread,
Dec 28, 2009, 5:59:55 AM12/28/09
to pon...@googlegroups.com
2009/12/28 ChenMing <mocke...@gmail.com>

这个应该是Make时的依赖关系没有做好吧,如果依赖关系正确的话, xxxx.h 改变的话,所有包含它的 .cpp 都会从新编译的。

我也觉得啊,VC居然有这个bug。我怎么没有发现啊? 

Dbger

unread,
Dec 28, 2009, 6:04:51 AM12/28/09
to pon...@googlegroups.com
>>我也觉得啊,VC居然有这个bug。我怎么没有发现啊?
 VC没有这个问题吧,VC是根据文件的最新更新时间来判断一个cpp要不要重新编译(如果你包含了这个头文件),又不会解析到底改了什么内容的。
2009/12/28 Xpol Wan <xpo...@gmail.com>

up duan

unread,
Dec 28, 2009, 6:20:09 AM12/28/09
to pon...@googlegroups.com
VS的工程管理有问题。没有搞清楚依赖。

2009/12/28 Dbger <baiya...@gmail.com>

Shuo Chen

unread,
Dec 28, 2009, 9:51:50 AM12/28/09
to TopLanguage
楼主不就是想不全部重新编译么?
VC分析这点依赖关系还是靠得住的。

On Dec 28, 3:04 pm, ChenMing <mockey.c...@gmail.com> wrote:
> 这个应该是Make时的依赖关系没有做好吧,如果依赖关系正确的话, xxxx.h 改变的话,所有包含它的 .cpp 都会从新编译的。
>
> MS的东西不清楚,在Gcc下,就可以通过 gcc -MM 来导出 .cpp 的依赖关系的。
>

> 2009/12/27 Nan Hu <hunan1...@gmail.com>:

Neuron.Lin

unread,
Dec 28, 2009, 7:58:50 PM12/28/09
to TopLanguage
http://www.taoyard.net.cn/?p=63
Makefile 解析 C 头文件依赖

On Dec 27, 4:04 am, Nan Hu <hunan1...@gmail.com> wrote:

up duan

unread,
Dec 28, 2009, 9:02:40 PM12/28/09
to pon...@googlegroups.com


2009/12/28 Shuo Chen <gian...@gmail.com>
楼主不就是想不全部重新编译么?
VC分析这点依赖关系还是靠得住的。

根据我的经验,VS和eVC对于这个依赖关系的分析还真就是靠不住。
除了static const int member = x;还有所有的default parameters,VS都搞不清楚这个依赖关系。

Reply all
Reply to author
Forward
0 new messages