gcc 常见的编译警告与错误(按字母顺序排列)
C语言初学者遇到的最大问题往往是看不懂编译错误,进而不知如何修改程序。有鉴于此,本附录罗列了用gcc编译程序时经常出现的编译警告与错误。需要提醒读者的是,出现警告(warning)并不影响目标程序的生成,但出现错误(error)则无法生成目标程序。
为便于读者查阅,下面列出了经常遇到的警告与错误,给出了中英文对照(英文按字典顺序排列),并对部分错误与警告做了必要的解释。
#%s expects \FILENAME\ or …
#%s 需要 \FILENAME\ 或… 
#%s is a deprecated GCC extension
#%s 是一个已过时的 GCC 扩展 
#%s is a GCC extension
#%s 是一个 GCC 扩展 
#~ error: 
#~ 错误:  printf函数的执行顺序
#~ In file included 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
#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’ 
%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 filename
“%s”不是一个有效的文件名 
\%s\ is not defined
“%s”未定义 
\%s\ may not appear in macro parameter list
“%s不能出现在宏参数列表中 
\%s\ re-asserted
重断言“%s” 
\%s\ redefined
“%s重定义 
\/*\ within comment
“/*出现在注释中 
\\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" redefined
protocol_type重定义
anonymous variadic macros were introduced in C99
匿名可变参数宏在 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 file %s
不到源文件 %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 在执行字符集中不是单字节的 
character constant too long for its type
字符常量大小超出其类型 
comma operator in operand of #if
#if 操作数中出现逗号 
comparison between pointer and integer
integerpointer比较
comparison is always false due to limited range of data type 
由于数据类型范围的限制,比较结果一直为假