审查生成的标签复制辅助函数

来自 C 预处理器
C23 (GCC 13.3.0) 高级 7分钟 找出 4处问题

在这段生成的 C23 代码进入可移植库之前进行审查。

仅在标签能够放入调用方存储时才复制并补终止符;失败时保持目标不变,并且只在 FEATURE_TRACE 为 1 时编译跟踪代码。

C
#include <stddef.h>
#include <stdio.h>
#include <string.h>

#define FEATURE_TRACE 0
#ifdef FEATURE_TRACE
#define TRACE(format, ...) printf(format, ##__VA_ARGS__)
#else
#define TRACE(format, ...) ((void)0)
#endif

#define COPY_LABEL(dst, src, count) do { \
    memcpy((dst), (src), (count)); \
    (dst)[(count)] = '\0'; \
} while (0)

size_t store_label(char *dst, size_t capacity,
                   const char *src, size_t length) {
    if (length > capacity) return 0;
    COPY_LABEL(dst, src, length);
    TRACE("stored %zu\n", length);
    return length;
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误