如何有效地计算出能够提供相同代码的最小宏定义组合列表?宏列表是事先已知的。
目标是编译较少版本的程序(可能是着色器),从而通过了解哪些宏组合是等效的来跳过一些编译时间。 例如。如果使用MACRO_A和MACRO_B构建的程序与仅使用MACRO_A构建的程序相同。
为了简单起见,这些宏是定义与否,它们的值无关紧要(意味着没有#if SOMEMACRO)。
例如:
#ifdef A
#ifdef B
// some code
#endif
// some code
#elif defined(C)
// some code
#else
// some code
#endif
生成所有程序的一个简单方法是使用从A,B和C组成的所有组合进行编译。这意味着创建2 ^ 3 = 8种组合。但是,只有以下组合才有用(!
表示未定义宏,~
宏无关紧要,可以定义或未定义):
( A, B, ~C)
(与A,B,C和A,B,!C相同)( A, !B, ~C)
(!A, ~B, C)
(!A, ~B, !C)
这意味着只编译具有以下定义的程序就足够了:
通过这个列表,我知道当被要求使用(A, !B, C)
组合的程序时,我可以简单地使用仅使用A定义的程序。
可以使用哪些工具?
注意: