在body其他函数中声明函数方法的用例是什么?

时间:2014-11-04 10:59:08

标签: c++ c

我在FreeRTOS来源中看到了这篇文章:

void vApplicationIdleHook( void )
{

    /* The simple blinky demo does not use the idle hook - the full demo does. */
    #if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
    {
        extern void vFullDemoIdleHook( void );

        //* Implemented in main_full.c. */
        vFullDemoIdleHook();
    }
    #endif

}

为什么要声明这样的函数/方法?有什么好处?我在Java中也看到了类似的代码。

2 个答案:

答案 0 :(得分:8)

我假设这是项目中唯一使用vFullDemoIdleHook的地方,所以它很清楚&简洁,只需在这几行代码中保持声明和函数调用。

将声明放在其他地方会有什么好处?考虑另一种选择......这可能是您更习惯看到的:

/* The simple blinky demo does not use the idle hook - the full demo does. */
#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
extern void vFullDemoIdleHook( void );
#endif


void vApplicationIdleHook( void )
{

  /* The simple blinky demo does not use the idle hook - the full demo does. */
  #if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
  {
    //* Implemented in main_full.c. */
    vFullDemoIdleHook();
  }
  #endif

}

我认为没有优势

答案 1 :(得分:1)

我说没有理由在函数中声明函数,因为它给错误的印象它仅仅限于该函数ISN'吨。 函数具有外部链接(除了你的代码特别是extern用于函数vFullDemoIdleHook())默认情况下,声明内部函数应该被认为是一种不好的做法(但是有效)。

原型应位于头文件中(如果没有标题,则应位于源文件的顶部)。我将声明移至main_full.h

 extern void vFullDemoIdleHook( void ); /* extern keyword is redundant here */

main_full.c:

void vApplicationIdleHook( void )
{
    /* The simple blinky demo does not use the idle hook - the full demo does. */
    #if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
    {
        //* Implemented in main_full.c. */
        vFullDemoIdleHook();
    }
    #endif
}

除非您打算使用相同的函数名vFullDemoIdleHook用于其他目的(这可能很糟糕),否则您不需要有条件地(#if)声明函数原型。