【发布时间】:2014-08-16 06:46:54
【问题描述】:
为什么旧的 Windows API 要求您传递这么多参数?
示例(来自stack overflow):
// additional information
STARTUPINFO si;
PROCESS_INFORMATION pi;
// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// start the program up
CreateProcess( lpApplicationName, // the path
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread
);
为什么这么复杂?每个参数都是必需的,我们不需要强制用户一次传入每个参数,它们可以稍后设置,提供“构造函数”等等。
edit : C 语言不支持默认值,所以我删除了这个选项
【问题讨论】:
-
C中没有默认参数
-
这些参数中的每一个都有特定的用途。您不使用它们意味着它们不适合 您的 特定用途。您始终可以将它们包装起来以方便您的需求。 MS 选择不这样做为您不是 API 的问题。