61 c
我知道在C语言中,将数字常量声明为enums而不是#define它们是非常惯用的,或者至少是好的风格.
/* bad style */
#define MAXLINE 1024
/* good/better style */
enum {
MAX_LINE = 1024
};
Run Code Online (Sandbox Code Playgroud)
字符串常量的定义是否有等效规则?
/* is this good style? */
#define HELLO "Hello World"
/* or is this better? */
const char *HELLO2 = "Howdy";
Run Code Online (Sandbox Code Playgroud)
你喜欢哪个?如果可能,显示任何一种方法的一些缺点.
Mic*_*ker 92
还有一条(至少)通往罗马的道路:
static const char HELLO3[] = "Howdy";
Run Code Online (Sandbox Code Playgroud)
(static- 可选 - 是为了防止它与其他文件冲突).我更喜欢这个const char*,因为那时你将能够使用sizeof(HELLO3),因此你不必推迟到运行时你可以在编译时做什么.
定义具有编译时连接的优点,但(思考HELLO ", World!")也可以sizeof(HELLO).
但是,您也可以const char*在多个文件中使用它,这样可以节省大量内存.
简而言之 - 这取决于.
Wil*_*ell 19
定义字符串常量的一个优点(尽管非常轻微)是您可以连接它们:
#define HELLO "hello" #define WORLD "world" puts( HELLO WORLD );
不确定这真的是一个优势,但它是一种不能与const char*一起使用的技术.
Vir*_*ren 12
如果你想要一个像你的问题那样的"常量字符串",那么我真的会选择你在问题中说明的版本:
/* first version */
const char *HELLO2 = "Howdy";
Run Code Online (Sandbox Code Playgroud)
特别是,我会避免:
/* second version */
const char HELLO2[] = "Howdy";
Run Code Online (Sandbox Code Playgroud)
原因:第二个版本的问题是编译器将复制整个字符串"Howdy",PLUS该字符串是可修改的(因此不是真正的const).
另一方面,第一个版本是const指针HELLO2可访问的const字符串,任何人都无法修改它.
#define方法的主要缺点是每次使用时字符串都是重复的,因此您可以在可执行文件中使用它的大量副本,使其更大.
| 归档时间: |
|
| 查看次数: |
178358 次 |
| 最近记录: |