xkf*_*007 4 c ffmpeg compiler-optimization
最近,我正在编译Windows下的ffmpeg代码使用带有intel编译器的VS2010.对于以下代码:
void ff_dcadsp_init(DCADSPContext *s)
{
s->lfe_fir = dca_lfe_fir_c;
if (ARCH_ARM) ff_dcadsp_init_arm(s);
}
Run Code Online (Sandbox Code Playgroud)
宏ARCH_ARM被定义为0.
当我在linux下编译它时,ff_dcadsp_init_arm()目标文件中没有函数,而它在windows下呢?所以我想确定编译器是否会对无用代码以及如何为INTEL编译器设置它做一些事情.
通常,大多数编译器都能够处理这种死代码,有效地删除了特定的指令/块.但是,AFAIK不保证可能在编译器和/或提供的优化级别设置之间有所不同.
但是,如果您希望在预处理状态下处理它(应该是更好的方法,恕我直言,就像ARCH_ARMMACRO一样),您可以使用#if预处理程序语句来消除对编译器优化级别的依赖性.
例如,一般而言
void ff_dcadsp_init(DCADSPContext *s)
{
//something common code
#if ARCH_ARM //this {#if...#endif} block
ff_dcadsp_init_arm(s); //only get compiled if ARCH_ARM evaluates to non-zero
#endif
//something more common code
}
Run Code Online (Sandbox Code Playgroud)