gcc 常见的编译警告与错误(按字母顺序排列)
gcc 常见的编译警告与错误(按字母顺序排列)
C语言初学者遇到的最大问题往往是看不懂编译错误,进而不知如何修改程序。有鉴于此,本附录罗列了用gcc编译程序时经常出现的编译警告与错误。需要提醒读者的是,出现警告(warning)并不影响目标程序的生成,但出现错误(error)则无法生成目标程序。
为便于读者查阅,下面列出了经常遇到的警告与错误,给出了中英文对照(英文按字典顺序排列),并对部分错误与警告做了必要的解释。
#%s expects \\\\ or … #%s 需要 \\\\ 或…
#%s is a deprecated GCC extension #%s 是一个已过时的 GCC 扩展
#%s is a GCC extension #%s 是一个 GCC 扩展
#~ error: #~ 错误:
#~ In from %s:%u
#~ 在包含自 %s:%u 的文件中
#~ internal error: #~ 内部错误:
#~ no newline at end of file #~ 文件未以空白行结束
#~ warning: #~ 警告:
#elif after #else
#elif 出现在 #else 后
#elif without #if
#elif 没有匹配的 #if
#else after #else
#else 出现在 #else 后
#else without #if
1 / 16
gcc 常见的编译警告与错误(按字母顺序排列)
#else 没有匹配的 #if
#endif without #if
#endif 没有匹配的 #if
#include nested too deeply #include 嵌套过深
#include_next in primary source file #include_next 出现在主源文件中
#pragma %s %s is already registered #pragma %s %s 已经被注册
#pragma %s is already registered #pragma %s 已经被注册
#pragma once in main file
#pragma once 出现在主文件中
#pragma system_header ignored outside include file #pragma system_heade 在包含文件外被忽略
%.*s is not a valid universal character %.*s 不是一个有效的 Unicode 字符
%s in preprocessing directive 预处理指示中出现 %s
%s is a block device %s 是一个块设备
%s is shorter than expected %s 短于预期
%s is too large %s 过大
%s with no expression %s 后没有表达式
%s: not used because `%.*s’ defined as `%s’ not `%.*s’
%s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’
2 / 16
gcc 常见的编译警告与错误(按字母顺序排列)
%s: not used because `%.*s’ is poisoned %s:未使用因为‘%.*s’已被投毒
%s: not used because `%.*s’ not defined %s:未使用因为‘%.*s’未定义
%s: not used because `%s’ is defined %s:未使用因为‘%s’已定义
%s: not used because `__COUNTER__’ is invalid %s:未使用因为‘__COUNTER__’无效
(\\%s\\ is an alternative token for \\%s\\ in C++)
(在 C++ 中“%s”会是“%s”的替代标识符)
(this will be reported only once per input file) (此警告为每个输入文件只报告一次)
\\%s\\ after # is not a positive integer # 后的“%s”不是一个正整数
\\%s\\ after #line is not a positive integer #line 后的“%s”不是一个正整数
\\%s\\ cannot be used as a macro name as it is an operator in C++ “%s”不能被用作宏名,因为它是 C++ 中的一个操作符
\\%s\\ is not a valid
“%s”不是一个有效的文件名
\\%s\\ is not defined “%s”未定义
\\%s\\ may not appear in macro parameter list “%s不能出现在宏参数列表中
\\%s\\ re-asserted 重断言“%s”
\\%s\\ redefined “%s重定义
\\/*\\ within comment “/*出现在注释中
3 / 16
gcc 常见的编译警告与错误(按字母顺序排列)
\\\\x used with no following hex digits \\\\x 后没有 16 进制数字
\\defined\\ cannot be used as a macro name “defined不能被用作宏名
__COUNTER__ expanded inside directive with -fdirectives-only 带 -fdirectives-only 时 __COUNTER__ 在指示中扩展
__VA_ARGS__ can only appear in the expansion of a C99 variadic macro __VA_ARGS__ 只能出现在 C99 可变参数宏的展开中
_Pragma takes a parenthesized string literal _Pragma 需要一个括起的字符串字面常量
‘%.*s’ is not in NFC ‘%.*s’不在 NFC 中
‘%.*s’ is not in NFKC ‘%.*s’不在 NFKC 中
‘##’ cannot appear at either end of a macro expansion ‘##’不能出现在宏展开的两端
‘#’ is not followed by a macro parameter ‘#’后没有宏参数
‘$’ in identifier or number ‘$’出现在标识符或数字中
‘:’ without preceding ‘?’ ‘:’前没有‘?’
‘?’ without following ‘:’ ‘?’后没有‘:’
'return' with a value, in function returning void 在void返回类型的函数中,return返回值。
\protocol_type重定义
anonymous variadic macros were introduced in C99
4 / 16
gcc 常见的编译警告与错误(按字母顺序排列)
匿名可变参数宏在 C99 中被引入
assertion without predicate 断言后没有谓词
assertions are a deprecated extension 断言是一个已过时的 GCC 扩展
assertions are a GCC extension 断言是一个 GCC 扩展
assignment discards qualifiers from pointer target type 赋值时,取消了右值的限定。
assignment from incompatible pointer type 不兼容的指针间赋值
attempt to use poisoned \\%s\\ 试图使用有毒的“%s”
backslash and newline separated by space 反斜杠和换行为空格所分隔
backslash-newline at end of file 反斜杠续行出现在文件末尾
binary constants are a GCC extension 二进制常量是一个 GCC 扩展
C++ style comments are not allowed in ISO C90 C++ 风格的注释在 ISO C90 中不被允许
cannot find source 找不到源文件 %s
Character %x might not be NFKC 字符 %x 可能不是 NFKC
character 0x%lx is not in the basic source character set\\n 字符 0x%lx 不在基本源字符集中\\n
character 0x%lx is not unibyte in execution character set 字符 0x%lx 在执行字符集中不是单字节的
5 / 16