菜鸟,谨以此抛砖引玉:(根据宏开关决定代码行是否需要留下)
解析宏开关的主要问题在于该字串是否被定义过,开关语句是什么,是否有复杂宏语句的情况。
比如:#if _A || _B && !_C......#endif,此时就需要判断_A _B _C的情况,如果还有其他的逻辑运算符就更加复杂,此时就需要做一个解析宏字串的函数,返回值为true或则false。
比较麻烦的是就#elif的情况,因为它要求的是前面有一个为真,当前则不论情况都为假,所以很难处理,尤其是遇到后面还有#else的时候
所以我的想法是 遇到#elif判断前面的是否为真
如果elif前面的是真,则当前为假并且会一直到遇到#endif结束(实现方式可以用循环读取,知道找到#endif为止,)
如果elif前面为假,则elif为真则为真,为假则为假 而遇到else也不会影响。
如此就能解决掉代码去留问题