chrome里面的一些技巧

本文介绍了一种用于计算数组长度的C++模板方法,该方法能够有效地区分数组和指针,避免编译错误。同时,还讨论了文件删除过程中可能遇到的问题及解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 求数组长度

求数组长度一般采用的是#define count_of(arg) (sizeof(arg) / sizeof(arg[0])),但这个宏对于指针在编译是不报错的,chrome里面是这么干的:

template <typename t size_t n><span style="color: #0000ff">char</span> (&amp;ArraySizeHelper(T (&amp;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代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值