相关疑难解决方法(0)

如何在C中的for(;;)循环中初始化几个变量?

我以为可以在for循环中初始化几个变量:

for (int i = 0, char* ptr = bam; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)

但我发现这是不可能的.GCC给出以下错误:

错误:'char'之前的预期unqualified-id

你是否真的无法在for循环中初始化不同类型的变量?

c loops for-loop initialization

31
推荐指数
4
解决办法
4万
查看次数

使用GCC和clang __attribute __((cleanup))和指针声明的一种好的惯用方法

我认为GCC扩展__attribute__((cleanup))是一个好主意,至少在某些情况下,但我无法弄清楚如何以一种好的方式使用它.我所做的一切看起来仍然很烦人.

我看到了很多的代码做#define _cleanup_(x) __attribute__((cleanup(x))只是为了少打字,但它有没有办法通过有没有一个标准功能一样free或者closedir,fclose等?

我看到我不能写:

__attribute__((cleanup(free))) char *foo = malloc(10);
Run Code Online (Sandbox Code Playgroud)

因为清理回调会收到char**指针,所以我必须总是这样写:

static void free_char(char **ptr) { free(*ptr); }
__cleanup__((free_char)) char *foo = malloc(10);
Run Code Online (Sandbox Code Playgroud)

这非常烦人,最烦人的部分是为你需要的所有类型定义这样的清理函数,因为显然你不能只为它定义它void **.避免这些事情的最佳方法是什么?

c gcc clang

18
推荐指数
2
解决办法
3518
查看次数

标签 统计

c ×2

clang ×1

for-loop ×1

gcc ×1

initialization ×1

loops ×1