feat(pproc): 添加预处理器包含路径支持和改进头文件查找逻辑

添加了新的类型定义 scc_pproc_cstr_vec_t 用于存储包含路径,
并在 scc_pproc 结构中添加 include_paths 字段。实现改进的
switch_file_stack 函数,支持从当前目录、父目录和系统包含路径
中查找头文件,提供更完整的 #include 指令处理能力。

fix(core): 重命名环形缓冲区内联宏避免命名冲突

将 scc_ring_phys 宏重命名为 _scc_ring_phys,并添加其他相关
内部宏如 _scc_ring_cap、_scc_ring_head 等,以避免与外部接口
的命名冲突并提高代码清晰度。

refactor(main): 添加命令行包含路径选项并清理标准库引用

在命令行参数解析中添加 -I/--include 选项支持,允许用户指定
额外的头文件搜索路径。同时移除不必要的 stdio.h 引用并清理
一些调试相关的缓冲区设置。
This commit is contained in:
zzy
2026-02-19 19:30:00 +08:00
parent a52ff33e30
commit bc0b1d23e3
5 changed files with 62 additions and 14 deletions

View File

@@ -29,14 +29,20 @@
// ==================== 内部辅助宏 (不直接使用) ====================
#define scc_ring_phys(ring, idx) ((idx) % (ring).cap)
#define _scc_ring_phys(ring, idx) ((idx) % (ring).cap)
#define _scc_ring_cap(ring) ((ring).cap)
#define _scc_ring_head(ring) ((ring).head)
#define _scc_ring_probe(ring) ((ring).probe)
#define _scc_ring_tail(ring) ((ring).tail)
#define _scc_ring_size(ring) ((ring).tail - (ring).head)
#define _scc_ring_empty(ring) ((ring).head == (ring).tail)
/**
* @brief 确保 probe 位置有数据可用 (尝试填充)
* @param ring 环形缓冲区变量
* @param ok 变量名 (如 int ok_flag) ,宏会将其设置为 true 或 false
*/
#define scc_ring_ensure(ring, ok) \
#define _scc_ring_ensure(ring, ok) \
do { \
ok = 1; \
if ((ring).probe < (ring).tail) \
@@ -50,7 +56,7 @@
ok = 0; /* 缓冲区满,无法填充 */ \
break; \
} \
usize phys_tail = scc_ring_phys(ring, (ring).tail); \
usize phys_tail = _scc_ring_phys(ring, (ring).tail); \
if ((ring).fill == null || \
!(ring).fill(&(ring).data[phys_tail], (ring).userdata)) { \
ok = 0; \
@@ -110,14 +116,14 @@
*/
#define scc_ring_peek(ring, val, ok) \
do { \
scc_ring_ensure(ring, ok); \
_scc_ring_ensure(ring, ok); \
if (!(ok)) \
break; \
if ((ring).probe >= (ring).tail) { \
ok = 0; \
break; \
} \
usize _phys = scc_ring_phys(ring, (ring).probe); \
usize _phys = _scc_ring_phys(ring, (ring).probe); \
val = (ring).data[_phys]; \
} while (0)
@@ -129,14 +135,14 @@
*/
#define scc_ring_next(ring, val, ok) \
do { \
scc_ring_ensure(ring, ok); \
_scc_ring_ensure(ring, ok); \
if (!(ok)) \
break; \
if ((ring).probe >= (ring).tail) { \
ok = 0; \
break; \
} \
usize _phys = scc_ring_phys(ring, (ring).probe); \
usize _phys = _scc_ring_phys(ring, (ring).probe); \
val = (ring).data[_phys]; \
(ring).probe++; \
} while (0)