c - 如何将大括号括起来的初始化列表作为参数传递?

标签 c function

这是这篇文章的副本:Brace Enclosed Initializer List As Function Argument ,尽管我正在寻找仅使用 C 中可用方法的解决方案。我使用的是 Windows 8 编译器。

基本上,我想做这样的事情:

HANDLE hThread1 = CreateThread(...);
HANDLE hThread2 = CreateThread(...);
HANDLE hThread3 = CreateThread(...);

...

WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );

而不是这个:

HANDLE hThread[3];
hThread[0] = CreateThread(...);
hThread[1] = CreateThread(...);
hThread[2] = CreateThread(...);

...

WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );



foo(arg1, arg2, {arg3_1, arg3_2});

最佳答案

C99 提供复合文字,给你你想要的:

WaitForMultipleObjects( 3,
                        (HANDLE*){hThread1, hThread2, hThread3},
                        FALSE,
                        INFINITE );

不幸的是,Microsoft 表示他们没有兴趣支持 C90 之后的任何 C 标准,除了那些恰好是 C++ 一部分的功能(并且 C++ 没有复合文字)。

您可以编写一个可变参数函数来构建一个 HANDLE 数组并返回指向其第一个元素的指针。调用可能如下所示:

WaitForMultipleObjects( 3,
                        HandleList(3, hThread1, hThread2, hThread3),
                        FALSE,
                        INFINITE );

但是随后您会遇到管理分配给数组的内存的常见问题。

C90 没有提供一种特别干净的方式来做你想做的事。

关于c - 如何将大括号括起来的初始化列表作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268305/

相关文章:

javascript - 为什么 JavaScript "onblur"函数没有被调用?

function - 如何在 Go 中通过反射测试一组函数?

c++ - 使用函数从 C++ 中的数组中删除重复项

python - 无法避免 Cython 在 Python2.7 而不是 Python3.x 中编译外部 C 模块

c - 为什么 'extern'存储类的功能不同?

php - 我怎样才能有效地让我的脚本休眠准确的毫秒数?

c - 在 yacc 和 lex char 数组中制作计算器

c - 初始化嵌套结构

javascript - 当用户在警报框上单击 "ok"时运行另一个 javascript

Python/Cython/C 和回调,使用 Cython 从 C 调用 Python 函数