在C中的以下陈述中哪一个更好用?
static const int var = 5;
Run Code Online (Sandbox Code Playgroud)
要么
#define var 5
Run Code Online (Sandbox Code Playgroud)
要么
enum { var = 5 };
Run Code Online (Sandbox Code Playgroud) 使用static constvars比#define预处理器更好吗?或者也许取决于背景?
每种方法的优点/缺点是什么?
可能重复:
为什么有人会使用#define来定义常量?
c ++ C++中的宏和const之间的区别
- 枚举与const对#define
使用#define和const创建常量有什么区别?有没有比其他的性能优势?当然我更喜欢使用它,const但我会考虑#define它是否具有合适的优势.
使用#define而不是const有什么优缺点(反之亦然)?
当我读到错误的编程实践特别是魔术数字时,我发现自己更频繁地使用#define.一些问题突然出现在我脑海中,例如:
使用#define很难吗?
它需要内存空间吗?
使用const会更快吗?
我读了一下这个,但我仍然不确定,从我所理解的:
#define定义一个宏(不确定宏意味着什么),它处理预处理.在处理代码之前,它会将已定义关键字的所有实例替换为其他实例.另一方面,const是变量,其值在运行时期间不能在中途改变.
我能想到使用const的唯一原因是该值是否依赖于其他变量.例如:
#define PI 3.14159f
#define RADIUS 3.0f
#define AREAOFCIRCLE PI*RADIUS*RADIUS
Run Code Online (Sandbox Code Playgroud)
由于AREAOFCIRCLE的每个实例都将被PI*RADIUS*RADIUS取代,因此每次使用AREAOFCIRCLE时程序都会为它计算,因此效率很低.另一方面:
const float areaofcircle = PI*RADIUS*RADIUS;
Run Code Online (Sandbox Code Playgroud)
会更有效,因为程序只计算一次.
回到最初的问题,#define与const相比如何?
#define MAXSTR "Maximum number reached"
char *str = MAXSTR;
Run Code Online (Sandbox Code Playgroud)
在做这种操作的同时.代码工作正常,但我得到lint错误.我怎么解决它?
Error:
Assignment of string literal to variable
Run Code Online (Sandbox Code Playgroud)
如果我使用:
#define MAXSTR "Maximum number reached"
char *str = (char *) MAXSTR;
Run Code Online (Sandbox Code Playgroud)
然后lint错误:
Attempt to cast away const (or volatile)
Run Code Online (Sandbox Code Playgroud)