小编Edw*_*ers的帖子

C void指针转换

typedef struct{
    void *val;
}struct_t;

void test(int val)
{
    struct_t *s = malloc(sizeof(struct_t));

    s->val = malloc(sizeof(int));

   *(int*)&s->val = val;

    free(s->val);
}
Run Code Online (Sandbox Code Playgroud)

free会产生一个sigabrt,但我认为这更像是我正在施放s-> val以使分配工作的方式的症状.执行此任务的正确方法是什么?

c free pointers casting sigabrt

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

这个字符串比较优化在规范方面有什么问题吗?

假设没有传递小于 4 个字节的字符串,那么这种优化有什么问题吗?是的,在比较大多数不相似的字符串时,在我测试过的机器上,这是一个显着的加速。

#define STRCMP(a, b) ( (*(int32_t*)a) == (*(int32_t*)b) && strcmp(a, b) == 0)

Run Code Online (Sandbox Code Playgroud)

假设字符串不少于 4 个字节,是否有一种更快的方法可以在不诉诸汇编等的情况下做到这一点?

c string optimization c-strings strcmp

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

C stringification:将常量转换为整数

我需要将定义的常量转换为它们的整数值,所以我想出了这个宏(STR_TO_CONST)来做到这一点......

#define STRFY_VAL(s) #s
#define STRFY_KEY(s) STRFY_VAL(s)
#define STR_TO_CONST(s) atoi(STRFY_KEY(s))
Run Code Online (Sandbox Code Playgroud)

它有效,但我想知道它是否有任何潜在的问题,因为我从来没有遇到过这个宏,尽管我已经搜索了类似的东西.

c macros stringification stringify

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