在c++中, 如何区别应用宏和静态变量

我只是一只狗 2014-04-15 08:05:46
有时候
#define MAX_LENGTH 1 可以达到定义一个常量
然而通过static int MAX_LENGTH = 1;

在c++中如何区分这两个的使用?何时应该使用前者,或者使用后者更为合适?
...全文
500 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
我只是一只狗 2014-04-16
  • 打赏
  • 举报
回复
引用 17 楼 lm_whales 的回复:
C,C++通用代码,用C的习惯用法 纯粹C++用C++的习惯用法 C:(C,C++ 通用)
1)
#define      PI        3.14
2)
enum{     red,green,blue  };
C++:
const double pi =3.14;
const int black =0;

class Color{
union{
unsigned int color;
struct{
unsigned char r,g,b,a;
}
unsigned carr[4];
};
static const int black = 0;  
};
还是直接看代码比较直观一点啊,瞬间感觉就明了了
emberfarkas 2014-04-16
  • 打赏
  • 举报
回复
宏也可以写成const static enum,这与用不用宏有毛关系。应该注意的是宏预编译,后面的都是编译时期,那个合适好用就那个好了。
lm_whales 2014-04-16
  • 打赏
  • 举报
回复
C,C++通用代码,用C的习惯用法 纯粹C++用C++的习惯用法 C:(C,C++ 通用)
1)
#define      PI        3.14
2)
enum{     red,green,blue  };
C++:
const double pi =3.14;
const int black =0;

class Color{
union{
unsigned int color;
struct{
unsigned char r,g,b,a;
}
unsigned carr[4];
};
static const int black = 0;  
};
sen_lin8350 2014-04-16
  • 打赏
  • 举报
回复
看到这个,明白了函数中static变量,和全局static变量的区别
引用 13 楼 zhulincao 的回复:
[quote=引用 2 楼 FENGQIYUNRAN 的回复:] 常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
static 全局变量:改变作用范围,不改变存储位置 (静态区) static 局部变量:改变存储位置(由栈区变为静态区),不改变作用范围 并且宏在定义常量时没有类型,尽量不要使用,C++中有很多替代。[/quote]
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
引用 12 楼 u011619422 的回复:
那是不是所有用宏定义的函数都是内联函数来代替?/这样会更快么?
不是, 因为宏的本质就是代码替换, 跟是不是内联点关系都没有. 但是表现形式跟内联函数有一点点相似性吧. 速度应该会比函数快, 因为少了函数调用相关的开销. 但宏的致命弱点就是没有语法检测.
jiandingzhe 2014-04-16
  • 打赏
  • 举报
回复
尽量用静态变量、inline函数、模板代替宏。 宏是最灵活的,如果那三个做不到,再用宏。
zhulincao 2014-04-16
  • 打赏
  • 举报
回复
引用 2 楼 FENGQIYUNRAN 的回复:
常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
static 全局变量:改变作用范围,不改变存储位置 (静态区) static 局部变量:改变存储位置(由栈区变为静态区),不改变作用范围 并且宏在定义常量时没有类型,尽量不要使用,C++中有很多替代。
我只是一只狗 2014-04-16
  • 打赏
  • 举报
回复
引用 10 楼 xiaohuh421 的回复:
在C++中, 尽量使用enum类型来写常数 次之是用 const 等等常量类型 最后是用宏.
那是不是所有用宏定义的函数都是内联函数来代替?/这样会更快么?
我只是一只狗 2014-04-16
  • 打赏
  • 举报
回复
引用 9 楼 mougaidong 的回复:
谁说都是预编译? 我不这么认为。
就是没怎么明白,求指教一下
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
在C++中, 尽量使用enum类型来写常数 次之是用 const 等等常量类型 最后是用宏.
turing-complete 2014-04-16
  • 打赏
  • 举报
回复
谁说都是预编译? 我不这么认为。
我只是一只狗 2014-04-16
  • 打赏
  • 举报
回复
引用 3 楼 mougaidong 的回复:
1、3都用 const 来解决,2用inline函数来解决。 另,局部静态的解释有误,请尽快修改,免误人子弟。 [quote=引用 2 楼 FENGQIYUNRAN 的回复:] 常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
[/quote] 感觉我自己模糊了这两个的用法,虽然我也知道用const 来定义比较好 但是还没有点不太明白这两个到底有什么区别,两个都是预编译,没有明白
turing-complete 2014-04-16
  • 打赏
  • 举报
回复
还是不对啊
引用 6 楼 FENGQIYUNRAN 的回复:
修正局部静态:定义在函数里面,生命周期所在文件。 [quote=引用 3 楼 mougaidong 的回复:] 1、3都用 const 来解决,2用inline函数来解决。 另,局部静态的解释有误,请尽快修改,免误人子弟。 [quote=引用 2 楼 FENGQIYUNRAN 的回复:] 常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
[/quote][/quote]
FeelTouch Labs 2014-04-16
  • 打赏
  • 举报
回复
C++中不建议采用宏,但是若想让一套工程可以同时运行在UNIX和WIN32中最便捷的方法,仍然是宏。谢谢! quote=引用 3 楼 mougaidong 的回复:] 1、3都用 const 来解决,2用inline函数来解决。 另,局部静态的解释有误,请尽快修改,免误人子弟。
引用 2 楼 FENGQIYUNRAN 的回复:
常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
[/quote]
lanlvy 2014-04-16
  • 打赏
  • 举报
回复
到真正需要使用区分的时候再来纠结哦
赵4老师 2014-04-16
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
FeelTouch Labs 2014-04-15
  • 打赏
  • 举报
回复
修正局部静态:定义在函数里面,生命周期所在文件。
引用 3 楼 mougaidong 的回复:
1、3都用 const 来解决,2用inline函数来解决。 另,局部静态的解释有误,请尽快修改,免误人子弟。 [quote=引用 2 楼 FENGQIYUNRAN 的回复:] 常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
[/quote]
unituniverse2 2014-04-15
  • 打赏
  • 举报
回复
宁可用枚举定义常量,好处是枚举成员不允许取地址、不占数据段的存储空间。 使用const常变量是因为以前没有什么好的方法来限定一个常量的类型(现在有了枚举类)。
阿锁 2014-04-15
  • 打赏
  • 举报
回复
C++中不用define了吧,用const定义常量
turing-complete 2014-04-15
  • 打赏
  • 举报
回复
1、3都用 const 来解决,2用inline函数来解决。 另,局部静态的解释有误,请尽快修改,免误人子弟。
引用 2 楼 FENGQIYUNRAN 的回复:
常用宏的情况有以下三种: 1,大家共识的量,比如π=3.14。 2,在文件中多次出现的且较为复杂的算式,此时注意一定要加上括号,不然有歧义。 3,某个变量在程序中出现次数较多,且有可能修改其值得情况。 至于你说的静态变量,又分为局部静态和全局静态。 局部静态:定义在函数里面,生命周期为函数内。 全局静态:限定于本源文件使用。若不加静态,则一个工程中所有的源文件都可使用。
加载更多回复(2)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧