在这段生成的 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;
}
生成代码仅作示例,不代表任何特定模型