我知道在SO上已经多次受到质疑,但我的问题是ANSI C(C89)特有的.
在C99有子符z和t,其未在ANSI下支持
使用说明p符怎么样?
假设我想'x'使用一个循环初始化一个字符数组,如果我使用一个int或一个size_t?
char *pch = (char *) malloc(100);
for (size_t s = 0; s < 100; s++)
pch[s] = 'x';
Run Code Online (Sandbox Code Playgroud)
注:我知道memset和其他"招数",我的问题是只是intVS size_t.
如果我将size_t变量设置为-1,就像在:
size_t s = -1;
Run Code Online (Sandbox Code Playgroud)
是否保证它将包含可以容纳的最大值s?
例如,如果sizeof(size_t)是4个字节,可我认为s会是0xFFFFFFFF?
作为补充信息:我需要这个来实现一个集合,其中我打算使用-1作为"项目不存在".同时我不想牺牲0,也不想使用int.
有时我看到程序员使用:
void *ptr = <something>;
if (ptr == NULL)
<do something>;
Run Code Online (Sandbox Code Playgroud)
代替:
void *ptr = <something>;
if (!ptr)
<do something>;
Run Code Online (Sandbox Code Playgroud)
有什么可以出错if (!ptr),或者只是一种编码风格偏好?
假设我的代码中有以下行:
struct info *pinfo = malloc(sizeof(struct info));
Run Code Online (Sandbox Code Playgroud)
通常还有另一行代码,如下所示:
if (!pinfo)
<handle this error>
Run Code Online (Sandbox Code Playgroud)
但这真的值得吗?特别是如果对象太小以至于生成的检查它的代码可能需要比对象本身更多的内存。
如果我想typedef为某个类型声明一个,我会在这个例子中使用类似这样的语法:
typedef int INT
Run Code Online (Sandbox Code Playgroud)
但是当我想创建一个typedef函数时,我期待以下语法:
typedef void (*)(int, char) myfunc;
Run Code Online (Sandbox Code Playgroud)
相反,正确的是:
typedef void (*myfunc)(int, char);
Run Code Online (Sandbox Code Playgroud)
那么为什么第一个不正确呢?
让我们看下面的例子:
#include <stdio.h>
enum fruit {APPLE, ORANGE, BANANA};
enum planet {EARTH, MARS, NEPTUNE};
void foo(enum fruit f)
{
printf("%ld", f);
}
int main()
{
enum planet p = MARS;
foo(p); /* compiler doesn't complain */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
enum如果代码可以编译,那么 s 有名字有什么意义呢?
这是我的 gcc 命令行:
gcc file.c -ansi -Wall -Wextra
Run Code Online (Sandbox Code Playgroud) 为什么不定义BOOL为enum:
enum BOOL {FALSE, TRUE};
Run Code Online (Sandbox Code Playgroud)
是否有任何理由BOOL必须明确指定为int(或任何其他整数类型)?