【问题标题】:Strange NOOP convention?奇怪的 NOOP 约定?
【发布时间】:2013-04-30 01:15:42
【问题描述】:

我正在浏览一个用于构建 Pebble 表盘的模板(在 cloudpebble.net)并遇到了以下代码:

void handle_minute_tick(AppContextRef ctx, PebbleTickEvent *t) {
  (void)t; // NOOP?
  (void)ctx; // NOOP?

  display_time(t->tick_time);
}


void handle_init(AppContextRef ctx) {
  (void)ctx; // NOOP?

  window_init(&window, "Big Time watch");
  window_stack_push(&window, true);
  window_set_background_color(&window, GColorBlack);

  resource_init_current_app(&APP_RESOURCES);

  // Avoids a blank screen on watch start.
  PblTm tick_time;

  get_time(&tick_time);
  display_time(&tick_time);
}


void handle_deinit(AppContextRef ctx) {
  (void)ctx; // NOOP?

  for (int i = 0; i < TOTAL_IMAGE_SLOTS; i++) {
    unload_digit_image_from_slot(i);
  }

}

我指出的这些行有什么用途?

【问题讨论】:

标签: c pebble-watch


【解决方案1】:

这些行的唯一目的是消除编译器警告,如-Wunused-parameter。请注意,这些变量不会在函数体的任何地方使用。将它们强制转换为 void 本质上是告诉编译器这是故意的。

【讨论】:

  • 请注意,另一种(更好的?)方法是从函数的第一行删除它们的名称,例如:void handle_minute_tick(AppContextRef, PebbleTickEvent *)
  • @StilesCrisis,这在 C++ 中是合法的,但在 C 中不合法。请参阅 this question
  • 在这种情况下参数t 实际使用,所以(void)t; 行似乎是一个错误。
  • 这段代码是 C++。它是在函数体中间声明变量。
  • @StilesCrisis,C99 也可以让你这样做。
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多