2022年gcc常见的编译警告与错误 .pdf

上传人:C****o 文档编号:33388091 上传时间:2022-08-10 格式:PDF 页数:16 大小:104.20KB
返回 下载 相关 举报
2022年gcc常见的编译警告与错误 .pdf_第1页
第1页 / 共16页
2022年gcc常见的编译警告与错误 .pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年gcc常见的编译警告与错误 .pdf》由会员分享,可在线阅读,更多相关《2022年gcc常见的编译警告与错误 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 gcc 常见的编译警告与错误(按字母顺序排列)C语言初学者遇到的最大问题往往是看不懂编译错误,进而不知如何修改程序。有鉴于此,本附录罗列了用gcc 编译程序时经常出现的编译警告与错误。需要提醒读者的是,出现警告( warning )并不影响目标程序的生成,但出现错误(error )则无法生成目标程序。为便于读者查阅,下面列出了经常遇到的警告与错误,给出了中英文对照(英文按字典顺序排列),并对部分错误与警告做了必要的解释。#%s expects FILENAME or #%s 需要FILENAME 或#%s is a deprecated GCC extension #%s 是一个已过时的G

2、CC 扩展#%s is a GCC extension #%s 是一个GCC 扩展# error: # 错误:# 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

3、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 2 #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 #pra

4、gma %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

5、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 页 - - - - - - - - - 3 %s:

6、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 repo

7、rted 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

8、 defined “%s”未定义%s may not appear in macro parameter list “%s 不能出现在宏参数列表中%s re-asserted 重断言“ %s”%s redefined “%s 重定义/* within comment “/*出现在注释中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 4 x used with no following hex digits x 后没有16 进制

9、数字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 _Pragm

10、a 需要一个括起的字符串字面常量%.*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

11、, in function returning void 在 void 返回类型的函数中,return返回值。protocol_type redefined protocol_type重定义anonymous variadic macros were introduced in C99 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 5 匿名可变参数宏在C99 中被引入assertion without predicate 断

12、言后没有谓词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

13、反斜杠和换行为空格所分隔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 0 x%lx is not in the basic source

14、character setn 字符0 x%lx 不在基本源字符集中n character 0 x%lx is not unibyte in execution character set 字符0 x%lx 在执行字符集中不是单字节的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 6 character constant too long for its type 字符常量大小超出其类型comma operator in ope

15、rand of #if #if 操作数中出现逗号comparison between pointer and integer integer与 pointer比较comparison is always false due to limited range of data type 由于数据类型范围的限制,比较结果一直为假comparison is always true due to limited range of data type 由于数据类型范围的限制,比较结果一直为真。conversion from %s to %s not supported by iconv iconv 不支持

16、从%s 到 %s 的转换converting escape sequence to execution character set 将转义序列转换到执行字符集converting to execution character set 转换到可执行文件的字符集converting UCN to execution character set 将 UCN 转换到执行字符集converting UCN to source character set 将 UCN 转换到源字符集could not determine date and time 无法决定日期与时间could not determine

17、file timestamp 无法决定文件的时间戳CPP arithmetic must be at least as precise as a target int CPP 算术必须至少具有目标int 的精度CPP half-integer narrower than CPP character CPP 半整数短于CPP 字符CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits 名师资料总结 - - -精品资料欢迎下载 - - - - -

18、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 7 在此宿主机上,CPP 不能处理长于%lu 位的宽字符常量,但目标需要%lu 位cppchar_t must be an unsigned type cppchar_t 必须是无符号型current file is older than %s 当前文件早于%s decimal float constants are a GCC extension 十进制浮点常量是一个GCC 扩展detected recursion whilst expa

19、nding macro %s 展开宏 %s 时检测到递归division by zero in #if #if 中用零做除数duplicate macro parameter %s 重复的宏参数“%s”embedding a directive within macro arguments is not portable 将一个指示嵌入宏参数中是不可移植的empty character constant 空的字符常量empty filename in #%s #%s 中文件名为空expected expression before else else 之前无表达式exponent has no

20、 digits 指数部分没有数字extra tokens at end of #%s directive #%s 指示的末尾有多余的标识符failure to convert %s to %s 无法从%s 转换到%s fixed-point constants are a GCC extension 定点常量是一个GCC 扩展名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 8 floating constant in prep

21、rocessor expression 浮点常量出现在预处理表达式中function-like macro %s must be used with arguments in traditional C 类似函数的宏“%s”在传统C 中必须与参数一起使用hex escape sequence out of range 16 进制转义序列越界hexadecimal floating constants require an exponent 16 进制浮点常量需要指数部分identifier %s is a special operator name in C+ 标识符“ %s”是C+ 中的一个

22、特殊操作符imaginary constants are a GCC extension 虚数常量是一个GCC 扩展imaginary number in preprocessor expression 预处理表达式中出现虚数impossible operator %u 不可能的操作%uIn _cpp_valid_ucn but not a UCN 在 _cpp_valid_ucn 中但不是一个UCN incompatible implicit declaration of built-in function printf 与内置的printf函数隐式声明不兼容。incomplete univ

23、ersal character name %.*s 不完全的Unicode 字符名%.*s initialization discards qualifiers from pointer target type 初始化取消了指针目标类型的限定。initialization from incompatible pointer type 不兼容指针类型的初始化integer constant is so large that it is unsigned 整数常量太大,认定为unsigned integer constant is too large for its type 整数常量值超出其类型

24、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 9 integer overflow in preprocessor expression 预处理表达式中整数溢出invalid #%s directive 无效的#%s 指示invalid #pragma GCC poison directive 无效的#pragma GCC poison 指示invalid #pragma pop_macro directive 无效的#pr

25、agma pop_macro 指示invalid #pragma push_macro directive 无效的#pragma push_macro 指示invalid built-in macro %s 无效的内建宏“%s”invalid character %c in raw string delimiter 原始字符串分隔符中有无效字符%cinvalid digit %c in binary constant 二进制常量中有无效数字“%c invalid digit %c in octal constant 8 进制常量中有非法字符“%c invalid flag %s in line

26、 directive line 指示中有无效的标记“%s invalid hash type %d in cpp_macro_definition cpp_macro_definition 中有无效的散列类型%d invalid prefix 0b for floating constant 浮点常量的“ 0b 前缀无效invalid preprocessing directive #%s 无效的预处理指示#%s invalid storage class for function XXXXXX 在文件的某个地方,丢失了一个大括号 invalid string literal, ignorin

27、g final 无效的字面字符串,忽略最后的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - 10 invalid suffix %.*s on floating constant 浮点常量的“ %.*s 后缀无效invalid suffix %.*s on integer constant 整数常量的“ %.*s 后缀无效invalid suffix %.*s with hexadecimal floating constan

28、t 十六进制浮点常量的“%.*s 后缀无效invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C+98 调用宏%s 的参数%d:空的宏参数未被ISO C90 和 ISO C+98 定义ISO C does not permit named variadic macros ISO C 不允许有名的可变参数宏ISO C99 requires rest arguments to be used ISO C99 需要使用剩余的参数ISO C99 requires whitespace

29、 after the macro name ISO C99 要求宏名后必须有空白line number out of range 行号超出范围lvalue required as left operand of assignment 左值问题macro %s is not used 宏“ %s”未被使用macro %s passed %u arguments, but takes just %u 宏“ %s”传递了%u 个参数,但只需要%u 个macro %s requires %u arguments, but only %u given 宏“ %s 需要%u 个参数,但只给出了%u 个ma

30、cro argument %s would be stringified in traditional C 宏参数“ %s”将在传统C 中被字符串化macro names must be identifiers 宏名必须是标识符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 11 macro parameters must be comma-separated 宏参数必须由逗号隔开missing ( after predic

31、ate 谓词后缺少 (missing ( in expression 表达式中缺少(missing ) after defined “defined 后出现 )missing ) in expression 表达式中缺少)missing ) in macro parameter list 在宏参数表中缺少)missing ) to complete answer 完整的答案缺少)missing binary operator before token %s 标识符“ %”s 前缺少二元运算符missing expression between ( and ) (与 )之间缺少表达式missin

32、g terminating %c character 缺少结尾的%c 字符missing terminating character 缺少结尾的 字符missing whitespace after the macro name 宏名后缺少空白multi-character character constant 多字节字符常量multi-line comment 多行注释Multiple include guards may be useful for:n 多个防止重包含可能对其有用:n 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -

33、- - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 12 no iconv implementation, cannot convert from %s to %s 没有iconv 的实现,无法从%s 转换到%s no include path in which to search for %s 没有包含路径可供搜索%s no macro name given in #%s directive #%s 指示中未给出宏名no newline at end of file 在文件最后一行加上回车键解释:在“ Rationale for

34、the C99 standard”一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Comm

35、ittee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence. c/c+ 代码的每一行后面有一个“结束符”,也就是 newline 。避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。non-ISO-standard escape sequen ce, %c 非 ISO 标准的转义序列, %cnull character(s) ignored 忽略空字符null charact

36、er(s) preserved in literal 空字符将保留在字面字符串中NULL directory in find_file find_file 中有NULL 目录octal escape sequence out of range 8 进制转义序列越界one or more PCH files were found, but they were invalid 找到一个或多个PCH 文件,但它们是无效的operator defined requires an identifier 操作符“ defined 需要一个标识符operator %s has no left operand

37、 操作符 %s没有左操作数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 13 operator %s has no right operand 操作符 %s没有右操作数passing argument 1 of mes_read_time discards qualifiers from pointer target type12 、mes_函数第一个参数的传递,丢弃了指针目标类型限定。parameter name mis

38、sing 缺少形参名passing argument 1 of send makes pointer from integer without a cast 函数 send 的第一个integer型参数没有强制转换为pointer型pasting %s and %s does not give a valid preprocessing token 毗连“ %s”和“ %s”不能给出一个有效的预处理标识符poisoning existing macro %s 对已存在的宏“%s”投毒predicate must be an identifier 谓词必须是一个标识符predicate s an

39、swer is empty 谓词的答案为空preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits 预处理算术的最高精度为%lu 位;目标需要%lu 位raw string delimiter longer than 16 characters 原始字符串分隔符长过16 个字符registering %s as both a pragma and a pragma namespace “%s”既被注册为一个pragma 又被注册为一个pragma 命名空间registering pra

40、gma %s with name expansion and no namespace pragma “%s”被注册为一个命名扩展,而没有命名空间registering pragma with NULL handler pragma 注册为被NULL 处理registering pragmas in namespace %s with mismatched name expansion 在命名空间“ %s”中注册pragma 时名称扩展不匹配名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -

41、 第 13 页,共 16 页 - - - - - - - - - 14 return makes pointer from integer without a cast return使 integer转换为 pointer,没有加强制类型转换。style of line directive is a GCC extension line 指示的风格是一个GCC 扩展suffix for double constant is a GCC extension 双精度常量后缀是一个GCC 扩展suggest hiding #%s from traditional C with an indented

42、 # 建议使用缩进的# 以让#%s 对传统C 不可见suggest not using #elif in traditional C 建议在传统C 中不使用#elif syntax error in macro parameter list 宏参数列表语法错误target char is less than 8 bits wide 目标char 短于8 位target int is narrower than target char 目标int 短于目标char target wchar_t is narrower than target char 目录wchar_t 短于目标char the

43、 conditional began here 条件自此开始the left operand of %s changes sign when promoted “%s 的左操作数在提升时变换了符号the meaning of %c is different in traditional C %c的意义与在传统C 中不同the meaning of a is different in traditional C a的意义与在传统C 中不同the meaning of x is different in traditional C x 的意义与在传统C 中不同the right operand o

44、f %s changes sign when promoted “%s 的右操作数在提升时变换了符号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 15 this is the location of the previous definition 这是先前定义的位置this use of defined may not be portable 使用“ defined 可能不利于移植token %s is not valid

45、 in preprocessor expressions 标识符“ %s”在预处理表达式中无效too many decimal points in number 数字中有太多小数点traditional C ignores #%s with the # indented 当 # 有缩进时传统C 忽略#%s traditional C rejects the %.*s suffix 传统C 不接受“ %.*s 后缀traditional C rejects the unary plus operator 传统C 不接受单目+ 运算符trigraph ?%c converted to %c 三元符

46、?%c 转换为%c trigraph ?%c ignored, use -trigraphs to enable 三元符?%c 被忽略,请使用-trigraphs 来启用unbalanced stack in %s %s 中堆栈不平衡undefining %s 取消对“ %s”的定义unexpected end of file after #line #line 后未预期的文件结束universal character %.*s is not valid at the start of an identifier Unicode 字符%.*s 在标识符开头无效universal charact

47、er %.*s is not valid in an identifier Unicode 字符%.*s 在标识符中无效universal character names are only valid in C+ and C99 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 16 Unicode 字符名只在C+ 和 C99 中有效unknown escape sequence: %c 未知的转义序列: %cunknown

48、escape sequence: %s 未知的转义序列: %sunspellable token %s 无法拼出的标识符%s unterminated #%s 未终止的#%s unterminated argument list invoking macro %s 调用宏“ %s”时参数列表未终止unterminated comment 未结束的注释unterminated raw string 未终止的原始字符串use of C+0 x long long integer constant 使用C+0 x long long 整数常量use of C99 hexadecimal floating constant 使用C99 式的16 进制浮点常量use -Winvalid-pch for more information 使用-Winvalid-pch 以获得更多信息while reading precompiled header 在读取预编译头时while writing precompiled header 在写入预编译头时名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁