【问题标题】:What's this usage of the variable cast to void in function body?在函数体中将变量强制转换为 void 的用法是什么?
【发布时间】:2016-09-03 14:11:56
【问题描述】:

我正在学习编写嵌入式 C 代码。我看到了一些类似下面的代码。

函数定义如下:

void printDebug(const char d1[]){(void)d1;}

它是这样使用的:

printDebug("BLE_UART_EVENT");

我不明白它的目的。它给了我一个可调用的char 数组的印象?

【问题讨论】:

  • “char 数组是可调用的”是什么意思?你认为这段代码的哪一部分是“调用”一个字符数组?如果您想知道,printDebug 如图所示是无操作的;目前尚不清楚练习的目的是什么。
  • @IgorTandetnik 老实说,(void)d1; 部分。但实际上我不太明白它是如何工作的。
  • 这只是一个类型转换
  • 这是一个什么都不做的类型转换。它只是抑制“未使用的参数”警告。这里没有调用任何内容。
  • 看起来它可能是尚未编写的代码占位符函数,或者可能是关闭调试模式时的 null 函数替代。只是猜测,但它没有做任何事情。

标签: c++ function casting function-parameter


【解决方案1】:

它没有调用char 数组,它只是将char 数组显式转换为void。 (并且评估结果立即被丢弃。)

我认为它只是用来禁止编译器警告未使用的变量。

如果该参数根本不使用,将其设为未命名参数会更清楚。

void printDebug(const char[]) {}

【讨论】:

  • 所以我认为printDebug 功能可能还没有完全实现。因此需要抑制未使用的参数警告。
  • @smwikipedia 我想调试版本会有另一个实现,它实际上会在某处打印它。但是对于发布版本,打印调试信息是没有意义的。
  • @smwikipedia 也许吧。但这仍然是一个坏主意。如果不使用,应该是未命名的。
猜你喜欢
  • 2011-06-06
  • 2016-08-07
  • 1970-01-01
  • 2011-05-09
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2016-03-21
相关资源
最近更新 更多