none
调用函数时,请列举不使用函数原型潜在的风险 RRS feed

  • 问题

  • 当调用函数时,如果不使用函数原型,有什么潜在的风险?

    请列举举例,越详细越好,谢谢大家


    good good study,day day up.
    2011年4月11日 7:16

答案

  • Hi PEIYANGXINQU,

    如果在函数调用前,没有对函数作声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数的声明,并将函数类型默认为int 型。

    例如一个max函数,调用之前没有进行函数声明,编译时首先遇到的函数形式是函数调用"max(a, b)",由于对原型的处理是不考虑参数名的,因此系统将max()加上int作为函数声明,即int max(); 因此不少教材说,如果函数类型为整型,可以在函数调用前不必作函数声明。但是使用这种方法时,系统无法对参数的类型做检查。或调用函数时参数使用不当,在编译时也不会报错。

    总而言之,C++需要原型至少有2点原因
    1.
    保证参数的正确传递(同C语言)
    2.C++
    编译器根据函数名和参数类型生成内部的函数名,声名原型有助于正确的连接

    一下两种情况可以不要函数声明:
    <1>
    如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。

    <2>
    如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调用函数中不必对所调用的函数再作声明

    如果您的问题解决了,请把有用的回答标记为答案!

     

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年4月12日 10:18
    版主

全部回复

  • 如果不使用函数原型,那么我使用函数指针调用会产生死锁吗
    good good study,day day up.
    2011年4月11日 7:38
  • 您不知道函数的原型,那您怎么给函数传递相关的参数呢?
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月11日 12:35
    版主
  • 不太清楚您的意思


    麻烦把正确答案设为解答。
    2011年4月12日 5:14
    版主
  • 什么情况都可能发生。
    2011年4月12日 5:18
  • Hi PEIYANGXINQU,

    如果在函数调用前,没有对函数作声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数的声明,并将函数类型默认为int 型。

    例如一个max函数,调用之前没有进行函数声明,编译时首先遇到的函数形式是函数调用"max(a, b)",由于对原型的处理是不考虑参数名的,因此系统将max()加上int作为函数声明,即int max(); 因此不少教材说,如果函数类型为整型,可以在函数调用前不必作函数声明。但是使用这种方法时,系统无法对参数的类型做检查。或调用函数时参数使用不当,在编译时也不会报错。

    总而言之,C++需要原型至少有2点原因
    1.
    保证参数的正确传递(同C语言)
    2.C++
    编译器根据函数名和参数类型生成内部的函数名,声名原型有助于正确的连接

    一下两种情况可以不要函数声明:
    <1>
    如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。

    <2>
    如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调用函数中不必对所调用的函数再作声明

    如果您的问题解决了,请把有用的回答标记为答案!

     

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年4月12日 10:18
    版主