0

不显式设置结构的每个成员的值是否是一种不好的做法,例如在 CHARFORMAT 结构中,您可以在一行中声明将其全部初始化,如下所示:

 CHARFORMAT foo = {sizeof(CHARFORMAT),CFM_FACE,0,0,0,0,0,0,"Arial"};

我特别喜欢这样做,因为这不仅减少了打字,而且我不必调用 _tcscpy 或类似的东西来复制到 szFaceName 的字符串值中。我不确定这是否更快,我不在乎它是否更快,而且我不打算移植或更改编译器、SDK 库或任何东西。

我只想知道,以这种方式进行初始化会产生影响吗?如果是这样,所涉及的风险是否完全不值得麻烦?我是否应该避免以这种方式一起初始化结构并明确地进行初始化?

4

1 回答 1

-1

我不会这样做,因为它容易出错且不可读。如果代码需要调整,很容易意外插入或删除初始化程序(或替换错误的初始化程序)。

请注意,您可以通过让编译器为您零初始化大多数成员来避免一些输入:

CHARFORMAT foo = { 0 };
foo.cbSize = sizeof foo;
foo.dwMask = CEM_FACE;
_tcscpy_s(foo.szFaceName, _countof(foo.szFaceName), T("Arial"));

不幸的是,无法避免strcpy调用(尤其是因为 Microsoft 编译器不支持 C99 指定的初始值设定项)。

于 2012-05-21T08:14:10.430 回答