1. 求数组长度
求数组长度一般采用的是#define count_of(arg) (sizeof(arg) / sizeof(arg[0])),但这个宏对于指针在编译是不报错的,chrome里面是这么干的:
template <typename t size_t n><span style="color: #0000ff">char</span> (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (<span style="color: #0000ff">sizeof</span>(ArraySizeHelper(array)))
<span style="color: #0000ff">void</span> Test(<span style="color: #0000ff">int</span> C[3])
{
<span style="color: #0000ff">int</span> A[3];
<span style="color: #0000ff">int</span> *B = Foo();
size_t x = arraysize(A); <span style="color: #008000">// Ok</span>
x = arraysize(B); <span style="color: #008000">// Compilation error</span>
x = arraysize(C); <span style="color: #008000">// Compilation error</span>
}</typename>
2. 删除文件
文件删除在某些时候是会失败的,再等待一段时间就可以删除了。
if (!file_util::Delete(db_name, false) && !file_util::Delete(db_name, false)) { // Try to delete twice. If we can't, fail. LOG(ERROR) unable to delete old TopSites file"; return false; }
来源于PVS-Studio vs Chromium, 这篇文章主要是讲PVS-Studio分析chrome代码。
本文介绍了一种用于计算数组长度的C++模板方法,该方法能够有效地区分数组和指针,避免编译错误。同时,还讨论了文件删除过程中可能遇到的问题及解决策略。
1130

被折叠的 条评论
为什么被折叠?



