为什么c局部变量需要转换为void?

Joe*_*Miu 2 c++

最近我在github上学习一个项目,我发现了这个.为什么到底有一个"(void)n"?

void CurrentThread::cacheTid()
{
  if (t_cachedTid == 0)
  {
    t_cachedTid = detail::gettid();
    int n = snprintf(t_tidString, sizeof t_tidString, "%5d ", t_cachedTid);
    assert(n == 6); (void) n;
  }
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 7

(void)n实际上是无操作.但是,它阻止编译器在关闭断言并assert()编译出前面时发出"未使用的变量"警告.