今天,当我编码时,这个问题发生在我身上.当我们想要定义和使用变量时,我们是否应该扩大其范围?特别是当在几个块语句中使用相同的变量时,这些块语句与这个变量之间没有任何关系.哪个更好?让变量在所有块语句之外,或在每个块语句中定义.给出一个这样的例子:
第一:
int vl_ret = 0;
int b = 1;
int c = 1;
if (b == 1)
{
vl_ret = do_something();
if (vl_ret == 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
if (c == 1)
{
vl_ret = do_something();
if (vl_ret == 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
Run Code Online (Sandbox Code Playgroud)
或第二:
int b = 1;
int c = 1;
if (b == 1)
{
iny vl_ret = do_something();
if (vl_ret = 1)
{
printf("1\n");
}
else …Run Code Online (Sandbox Code Playgroud) ATOM表示指针,指向独占和常量字符串.'C'中的字符串应以'\ 0'结尾.
我将展示两种在'C'中定义'ATOM TABLE'结构的方法:
struct atom1 {
struct atom1 *link;
int len;
char *str;
} *bucket[2048]
Run Code Online (Sandbox Code Playgroud)
和
struct atom2 {
struct atom2 *link;
int len;
char str[1];
} *bucket[2048]
Run Code Online (Sandbox Code Playgroud)
所以,当我想为这两种类型的ATOM分配内存时,我也有两种方法.
// memory + 1 for '\0'
struct atom1 *p = malloc(sizeof(*p) + len + 1);
Run Code Online (Sandbox Code Playgroud)
和
// memory for '\0' is already in the define of struct atom
struct atom2 *p = malloc(sizeof(*p) + len);
Run Code Online (Sandbox Code Playgroud)
所以我们可以看到,当我们想要分配内存时,'atom2'看起来更好.但另一方面,如果我们想要访问字符串的内存,我们将打破'C'的规则,因为'char str [1];' 在'atom2'中.
'atom2'真的很棒吗?