C标准未定义诊断消息数量上限 是否意味着编译器无错误输出限制?
C标准编译器诊断消息上限相关问题
背景
C2x及此前所有版本的C标准,都没有对编译器生成的诊断消息数量上限作出明确定义。
核心疑问
这是否意味着编译器本身不存在诊断消息输出数量限制?如果该推论成立,为何clang、MSVC等主流C编译器均设置了对应输出上限?目前实测的默认上限分别为:clang默认错误上限20条,MSVC默认错误上限100条。
验证演示代码
# clang 测试 $ for i in {1..100}; do echo int $i\x\; ; done > x.c && clang x.c -std=c11 2>&1 | grep 'error:' | wc -l 20 # msvc 测试 $ for i in {1..100}; do echo int $i\x\; ; done > x.c && cl x.c /std:c11 /Za 2>&1 | grep -P 'x\.c\(\d+\): error' | wc -l 101 # gcc 测试 $ for i in {1..100}; do echo int $i\x\; ; done > x.c && gcc x.c -std=c11 2>&1 | grep 'error:' | wc -l 200
问询缘由
部分C编译器诊断测试会在单个源文件中放置多个测试用例,要求编译器至少能输出与测试用例数量匹配的诊断消息。但实测发现:
- clang默认错误上限为20条,可通过
-ferror-limit参数调整 - MSVC的100条错误上限为硬编码配置,无法修改
附加问题
clang -std=c11是否应该默认启用-ferror-limit=0配置?
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

