为什么 ffmpeg 开发人员在宏化条件下使用 "runtime if"?
Why do ffmpeg developers use "runtime if" with macrofied condition?
我正在寻找 FFmpeg 源代码,我发现使用像这样的奇怪代码很奇怪:
#define MACRO 0
void func(void)
{
if (MACRO)
{
//code
}
}
有什么理由在处理宏时使用“if”而不是“#if ... #endif”吗?
ffmpeg repo 中的一些例子
Why ffmpeg developers using "runtime if" with macrofied condition
原因是当宏不是 常量表达式 时,可以用 #if
求值。可能会发生依赖于体系结构的常量之一在所有可能的路径中都不是常量表达式。
bool do_we_have_mmx_function() {
__asm__("magic here");
}
#define HAVE_MMX do_we_have_mmx_function()
#if HAVE_MMX // invalid
if (HAVE_MMX) { // ok
我正在寻找 FFmpeg 源代码,我发现使用像这样的奇怪代码很奇怪:
#define MACRO 0
void func(void)
{
if (MACRO)
{
//code
}
}
有什么理由在处理宏时使用“if”而不是“#if ... #endif”吗?
ffmpeg repo 中的一些例子
Why ffmpeg developers using "runtime if" with macrofied condition
原因是当宏不是 常量表达式 时,可以用 #if
求值。可能会发生依赖于体系结构的常量之一在所有可能的路径中都不是常量表达式。
bool do_we_have_mmx_function() {
__asm__("magic here");
}
#define HAVE_MMX do_we_have_mmx_function()
#if HAVE_MMX // invalid
if (HAVE_MMX) { // ok