refactor(pproc): 重构预处理器条件编译逻辑

- 提取条件判断逻辑到独立函数 scc_pproc_parse_if_need_skip
- 使用辅助函数 in_if, in_elif, in_else, in_endif 简化条件处理
- 添加宏 __SCC_PPROC_LOG_PNT 统一错误和警告处理逻辑
- 增加嵌套条件测试用例验证非活动状态下的正确行为
This commit is contained in:
zzy
2026-02-27 17:06:04 +08:00
parent 4e2176b7f0
commit 72ef3964ce
4 changed files with 152 additions and 110 deletions

View File

@@ -417,6 +417,50 @@ static void test_simple_number_conditional_if(void) {
" foo\n bar\n");
}
static void test_conditional_nested_inactive(void) {
TEST_CASE("nested conditional when outer inactive");
CHECK_PP_OUTPUT_EXACT("#ifdef NOT_DEFINED\n"
"#if 1\n"
"should not appear\n"
"#endif\n"
"#endif\n"
"after\n",
"after\n");
CHECK_PP_OUTPUT_EXACT("#define A\n"
"#ifdef A\n"
" #ifdef B\n"
" B defined\n"
" #else\n"
" B not defined\n"
" #endif\n"
"#else\n"
" A not defined\n"
"#endif\n",
" B not defined\n");
CHECK_PP_OUTPUT_EXACT("#undef A\n"
"#ifdef A\n"
" #ifdef B\n"
" B defined\n"
" #else\n"
" B not defined\n"
" #endif\n"
"#else\n"
" A not defined\n"
"#endif\n",
" A not defined\n");
CHECK_PP_OUTPUT_EXACT("#if 0\n"
"#ifdef X\n"
"X defined\n"
"#elifdef Y\n"
"Y defined\n"
"#else\n"
"none\n"
"#endif\n"
"#endif\n"
"end\n",
"end\n");
}
static void test_variadic_macros(void) {
TEST_CASE("variadic macros with __VA_ARGS__");
@@ -560,6 +604,7 @@ TEST_LIST = {
TEST_LIST_CASE(hard_test_define_func_macros),
TEST_LIST_CASE(test_conditional_ifdef),
TEST_LIST_CASE(test_simple_number_conditional_if),
TEST_LIST_CASE(test_conditional_nested_inactive),
TEST_LIST_CASE(test_variadic_macros),
TEST_LIST_CASE(test_gnu_comma_variadic_deletion),