我在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中也看到了类似的代码。
答案 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
)声明函数原型。