小编Bit*_*tes的帖子

如何在ANSI C(C89)中使用printf打印size_t和ptrdiff_t

我知道在SO上已经多次受到质疑,但我的问题是ANSI C(C89)特有的.

在C99有子符zt,其未在ANSI下支持

使用说明p符怎么样?

c printf c89

2
推荐指数
1
解决办法
1363
查看次数

关于使用size_t

假设我想'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.

c

2
推荐指数
1
解决办法
157
查看次数

将size_t变量设置为-1

如果我将size_t变量设置为-1,就像在:

size_t s = -1;
Run Code Online (Sandbox Code Playgroud)

是否保证它将包含可以容纳的最大值s

例如,如果sizeof(size_t)是4个字节,可我认为s会是0xFFFFFFFF

作为补充信息:我需要这个来实现一个集合,其中我打算使用-1作为"项目不存在".同时我不想牺牲0,也不想使用int.

c

2
推荐指数
1
解决办法
246
查看次数

if(!ptr)VS if(ptr == NULL)在C中

有时我看到程序员使用:

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),或者只是一种编码风格偏好?

c pointers

2
推荐指数
1
解决办法
1178
查看次数

需要检查C中malloc返回的指针

假设我的代码中有以下行:

struct info *pinfo = malloc(sizeof(struct info));
Run Code Online (Sandbox Code Playgroud)

通常还有另一行代码,如下所示:

if (!pinfo)
    <handle this error>
Run Code Online (Sandbox Code Playgroud)

但这真的值得吗?特别是如果对象太小以至于生成的检查它的代码可能需要比对象本身更多的内存。

c malloc

2
推荐指数
1
解决办法
734
查看次数

功能指针在C中使用typedef

如果我想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)

那么为什么第一个不正确呢?

c

1
推荐指数
1
解决办法
211
查看次数

为什么枚举在 C 中有名称?

让我们看下面的例子:

#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)

c enums c89

0
推荐指数
1
解决办法
611
查看次数

为什么Windows中的BOOL是int类型?

为什么不定义BOOLenum:

enum BOOL {FALSE, TRUE};
Run Code Online (Sandbox Code Playgroud)

是否有任何理由BOOL必须明确指定为int(或任何其他整数类型)?

c windows winapi

-2
推荐指数
1
解决办法
297
查看次数

标签 统计

c ×8

c89 ×2

enums ×1

malloc ×1

pointers ×1

printf ×1

winapi ×1

windows ×1