2014-05-06 50 views
2

這是我的老師在考試中提出的問題。我在書中和網上搜索,但我沒有找到答案。我知道問題的第一部分。問題與編譯器和彙編有關。位置與關鍵字參數

問: What are the advantages of using keyword parameters over positional parameters? Does it incur any overhead during the process of assembling? Does it incur any overhead during execution?

+0

首先,你知道這些概念是什麼意思嗎(a *關鍵字參數*與位置參數*)?這些不是真正的編譯器或彙編器概念,但可以應用於您編寫的任何程序。 – lurker

+0

@lurker是的,我知道他們。 我們使用這些作爲宏參數。我們正在教授關於包含宏的程序的編譯。 – Maverick

+1

包含使用哪種語言的宏的程序? (在我熟悉的幾種語言中,宏沒有關鍵字參數。) –

回答

1

回答您的問題:

  1. 有什麼優勢?

    主要優點是避免在錯誤位置定義錯誤參數的問題。例如:

    strlen(s); 
    

    只有一個參數,所以沒有冒險弄錯。但是:

    strpos(s, "needle", 34); 
    

    可能是錯誤的,因爲,例如,s"needle"可以顛倒。隨着命名參數:

    strpos(start_pos => 34, string => s, needle => "needle"); 
    

    可以肯定的是,參數將被妥善安置,一旦在組裝編譯(因爲最終結果彙編,顯然是非常重要的!)

  2. 架空組裝過程中處理?

    是的。顯然你需要讀取額外的數據,你的編譯器必須重新排序參數。也意味着頭文件必須聲明帶有名字的參數。在C中,您經常會看到類似這樣的內容:

    strpos(const char *, const char *, int); 
    

    現在您在聲明中以及使用函數時都有名稱。這是更多的標識符來解析和可能的內存分配,等等。

    在現代計算機上我們的肉眼可以看到這種開銷嗎?可能不會。

  3. 最終的二進制運行速度較慢嗎?

    不管哪種方式,結果在最終的二進制文件中都完全相同。只有一種方法比另一種更安全。 (也就是說,如果我們都被迫始終指定參數名稱,那麼會避免許多錯誤...但是,諸如PHP或python之類的腳本運行速度較慢,因爲每次執行時都需要重新解析這些參數腳本。)