2013-04-30 29 views
4

我在瀏覽一個模板(在cloudpebble.net)爲建設一個卵石手錶的臉,碰到這個代碼:奇怪的NOOP約定?

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); 
    } 

} 

我已經指示的行目的是什麼?

+3

我的猜測只是爲了避免變量沒有使用警告。 – John3136 2013-04-30 01:18:57

+1

請參閱http://stackoverflow.com/questions/3599160/unused-parameter-warnings-in-c-code – jarmod 2013-04-30 01:22:34

回答

10

這些行的唯一目的是爲了沉默像-Wunused-parameter這樣的編譯器警告。請注意,這些變量不在函數體中的任何位置使用;將它們拋入空白本質上告訴編譯器這是故意的。

+0

請注意,另一個(更好?)的方法是從函數的第一行中刪除它們的名稱,例如:'void handle_minute_tick(AppContextRef,PebbleTickEvent *)' – StilesCrisis 2013-04-30 01:23:03

+3

@StilesCrisis,這在C++中是合法的,但在C中不合法。請參見[這個問題](http://stackoverflow.com/questions/8776810/parameter-name-omitted- C-VS-c)中。 – Cairnarvon 2013-04-30 01:24:33

+3

在這種情況下,參數't' *是實際使用的,所以'(void)t;'行看起來是一個錯誤。 – caf 2013-04-30 01:28:57