这是此文章的副本:将括号括起来的初始化器列表作为函数参数,尽管我正在寻找仅使用C语言中可用方法的解决方案。我正在使用Windows 8编译器。
基本上,我想做这样的事情:
HANDLE hThread1 = CreateThread(...);
HANDLE hThread2 = CreateThread(...);
HANDLE hThread3 = CreateThread(...);
...
WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );
Run Code Online (Sandbox Code Playgroud)
代替这个:
HANDLE hThread[3];
hThread[0] = CreateThread(...);
hThread[1] = CreateThread(...);
hThread[2] = CreateThread(...);
...
WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );
foo(arg1, arg2, {arg3_1, arg3_2});
Run Code Online (Sandbox Code Playgroud)
C99 提供了复合文字,它会给你你想要的:
WaitForMultipleObjects( 3,
(HANDLE*){hThread1, hThread2, hThread3},
FALSE,
INFINITE );
Run Code Online (Sandbox Code Playgroud)
不幸的是,微软表示他们没有兴趣支持 C90 之后的任何 C 标准,除了那些恰好是 C++ 一部分的功能(并且 C++ 没有复合文字)。
您可以编写一个可变参数函数来构建 s 数组HANDLE并返回指向其第一个元素的指针。调用可能如下所示:
WaitForMultipleObjects( 3,
HandleList(3, hThread1, hThread2, hThread3),
FALSE,
INFINITE );
Run Code Online (Sandbox Code Playgroud)
但是,您会遇到管理为数组分配的内存的常见问题。
C90 没有提供一种特别干净的方式来做你想做的事情。
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |