2014-05-06 53 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之类的脚本运行速度较慢,因为每次执行时都需要重新解析这些参数脚本。)