#if !defined(AFX_MYAPI_H__4E0C0E71_454D_4E94_A513_1167F93265A2__INCLUDED_)
#define AFX_MYAPI_H__4E0C0E71_454D_4E94_A513_1167F93265A2__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <windows.h>
static int xxoo = MessageBox(0,"test","test",0);
#endif
这个头文件被很多CPP包含,程序执行时,MessageBox弹出来很多次,我想他只弹一次,但是不想用全局变量 互斥 之类的来判断是否执行过了。
我在想执行了这么多次,是这段代码是 想函数 一样,用的地方调用。还是像inline函数,被多次嵌到代码内,这样不是体积会大一些,我不想他这样。
这个程序不好调试,所以就来问了。
解决方案 »
- win2000下 vc编的程序无法启动问题
- 人手的图像识别,请教?
- 我关于全局指针的一点设想
- (解决给200分,我在网络编程区发了个100分的,没人回)如何判断本地连接是10M,100M,1000M.
- 创建CTreelctrl是,SelectedChange消息多次响应,怎么去掉?
- 关于OpenGL地形的问题
- CPropertySheet中如何使属性页的“帮助”按钮调用自己的帮助文件?
- borland c++的问题呀,100分.
- 如何在VC++6.0中实现数值型与字符串(CString)的转换(类似于Basic中的Val,Str$)多谢
- 多个同样标题的窗口,如何获得它们的窗口句柄?
- 字符串格式化,求高手指教.....
- VC添加自定义工具栏
static标识的静态全局变量作用域是所在源文件,有多少个源文件包含了这个头文件,就有多少个该变量分布在这些模块内
于是编译模块A——初始化静态全局变量——运行初始化语句跳出对话框——编译模块B——初始化静态全局变量——运行初始化语句跳出对话框——编译模块C……如果非要这么写,可以在一个源文件里定义非静态全局变量,其他源文件里声明该变量,这样只有一个全局变量,所以就只初始化一次,只跳出一个对话框
因为包含头文件本质上就是把头文件的代码复制到源文件中,头文件中的执行代码一样会被多处复制,导致链接时各模块内的变量名函数名冲突——即使在你眼中这些函数变量都是一样的,但“一样”并不是“同一个”
楼主的代码里使用static标识变量,避免了变量名冲突,但多个变量这个本质并没有改变
我们一贯执行,头文件里只能有变量定义、函数声明、或简单的datatype fun() const {return memeber;}
这种代码。