当前位置:文档之家› gcc错误提示详解

gcc错误提示详解

gcc错误提示详解
gcc错误提示详解

conversion from %s to %s not supported by iconv”

iconv 不支持从%s 到%s 的转换”

iconv_open”

iconv_open”

no iconv implementation, cannot convert from %s to %s”

没有iconv 的实现,无法从%s 转换到%s”

character 0x%lx is not in the basic source character set\n”

字符0x%lx 不在基本源字符集中\n”

converting to execution character set”

转换到可执行文件的字符集”

character 0x%lx is not unibyte in execution character set”

字符0x%lx 在执行字符集中不是单字节的”

Character %x might not be NFKC”

字符%x 可能不是NFKC”

universal character names are only valid in C++ and C99″Unicode 字符名只在C++ 和C99 中有效”

the meaning of ‘\\%c’ is different in traditional C”

‘\\%c’的意义与在传统C 中不同”

In _cpp_valid_ucn but not a UCN”

在_cpp_valid_ucn 中但不是一个UCN”

incomplete universal character name %.*s”

不完全的Unicode 字符名%.*s”

%.*s is not a valid universal character”

%.*s 不是一个有效的Unicode 字符”

‘$’ in identifier or number”

‘$’出现在标识符或数字中”

universal character %.*s is not valid in an identifier”

Unicode 字符%.*s 在标识符中无效”

univers al character %.*s is not valid at the start of an identifier”Unicode 字符%.*s 在标识符开头无效”

converting UCN to source character set”

将UCN 转换到源字符集”

converting UCN to execution character set”

将UCN 转换到执行字符集”

the meaning of ‘\\x’ is different in traditional C”

‘\\x’的意义与在传统C 中不同”

\\x used with no following hex digits”

\\x 后没有16 进制数字”

hex escape sequence out of range”

16 进制转义序列越界”

octal escape sequence out of range”

8 进制转义序列越界”

the meaning of ‘\\a’ is different in traditional C”

‘\\a’的意义与在传统C 中不同”

non-ISO-standard escape sequence, ‘\\%c’”

非ISO 标准的转义序列,‘\\%c’”

unknown escape sequence: ‘\\%c’”

未知的转义序列:‘\\%c’”

unknown escape sequence: ‘\\%s’”

未知的转义序列:‘\\%s’”

converting escape sequence to execution character set”将转义序列转换到执行字符集”

character constant t oo long for its type”

字符常量大小超出其类型”

multi-character character constant”

多字节字符常量”

empty character constant”

空的字符常量”

failure to convert %s to %s”

无法从%s 转换到%s”

extra tokens at end of #%s directive”

#%s 指示的末尾有多余的标识符”

#%s is a GCC extension”

#%s 是一个GCC 扩展”

#%s is a deprecated GCC extension”

#%s 是一个已过时的GCC 扩展”

suggest not using #elif in traditional C”

建议在传统C 中不使用#elif”

traditional C ignores #%s with the # indented”

当# 有缩进时传统C 忽略#%s”

suggest hiding #%s from traditional C with an indented #”

建议使用缩进的# 以让#%s 对传统C 不可见”

embedding a directive within macro arguments is not portable”

将一个指示嵌入宏参数中是不可移植的”

style of line directive is a GCC extension”

line 指示的风格是一个GCC 扩展”

invalid preprocessing directive #%s”

无效的预处理指示#%s”

\”defined\” cannot be used as a macro name”

“defined”不能被用作宏名”

\”%s\” cannot be used as a macro name as it is an operator in C++”“%s”不能被用作宏名,因为它是C++ 中的一个操作符”

no macro name given in #%s directive”

#%s 指示中未给出宏名”

macro names must be identifiers”

宏名必须是标识符”

undefining \”%s\”"

取消对“%s”的定义”

missing terminating > character”

缺少结尾的> 字符”

#%s expects \”FILENAME\” or ”

#%s 需要\”FILENAME\”或”

empty filename in #%s”

#%s 中文件名为空”

#include nested too deeply”

#include 嵌套过深”

#include_next in primary source file”

#include_next 出现在主源文件中”

invalid flag \”%s\” in line directive”

line 指示中有无效的标记“%s””

unexpected end of file after #line”

#line 后未预期的文件结束”

\”%s\” after #line is not a positive integer”

#line 后的“%s”不是一个正整数”

line number out of range”

行号超出范围”

\”%s\” is not a valid filename”

“%s”不是一个有效的文件名”

\”%s\” after # is not a positive integer”

# 后的“%s”不是一个正整数”

invalid #%s directive”

无效的#%s 指示”

registering pragmas in namespace \”%s\” with mismatched name expansion”在命名空间“%s”中注册pragma 时名称扩展不匹配”

registering pragma \”%s\” with name expansion and no namespace”pragma “%s”被注册为一个命名扩展,而没有命名空间”

registering \”%s\” as both a pragma and a pragma namespace”

“%s”既被注册为一个pragma 又被注册为一个pragma 命名空间”

#pragma %s %s is already registered”

#pragma %s %s 已经被注册”

#pragma %s is already registered”

#pragma %s 已经被注册”

r egistering pragma with NULL handler”

pragma 注册为被NULL 处理”

#pragma once in main file”

#pragma once 出现在主文件中”

invalid #pragma push_macro directive”

无效的#pragma push_macro 指示”

invalid #pragma pop_macro directive”

无效的#pragma pop_macro 指示”

invalid #pragma G CC poison directive”

无效的#pragma GCC poison 指示”

poisoning existing macro \”%s\”"

对已存在的宏“%s”投毒”

#pragma system_header ignored outside include file”#pragma system_heade 在包含文件外被忽略”

cannot find source file %s”

找不到源文件%s”

current file is older than %s”

当前文件早于%s”

_Pragma takes a parenthesized string literal”

_Pragma 需要一个括起的字符串字面常量”

#else without #if”

#else 没有匹配的#if”

#else after #else”

#else 出现在#else 后”

the conditional began here”

条件自此开始”

#elif without #if”

#elif 没有匹配的#if”

#elif after #else”

#elif 出现在#else 后”

#: directives.c:1960

#endif without #if”

#endif 没有匹配的#if”

missing ‘(‘ after predicate”

谓词后缺少‘(’”

missing ‘)’ to complete answer”

完整的答案缺少‘)’”

predicate’s answer is empty”

谓词的答案为空”

assertion without predicate”

断言后没有谓词”

predicate must be an identifier”

谓词必须是一个标识符”

\”%s\” re-asserted”

重断言“%s””

unterminated #%s”

未终止的#%s”

unterminated comment”

未结束的注释”

stdout”

stdout”

%s: %s”

%s:%s”

too many decimal points in number”数字中有太多小数点”

fixed-point constants are a GCC extension”

定点常量是一个GCC 扩展”

invalid digit \”%c\” in binary constant”

二进制常量中有无效数字“%c””

invalid digit \”%c\” in octal constant”

8 进制常量中有非法字符“%c””

invalid prefix \”0b\” for floating constant”

浮点常量的“0b”前缀无效”

use of C99 hexadecimal floating constant”

使用C99 式的16 进制浮点常量”

exponent ha s no digits”

指数部分没有数字”

hexadecimal floating constants require an exponent”

16 进制浮点常量需要指数部分”

invalid suffix \”%.*s\” on floating constant”

浮点常量的“%.*s”后缀无效”

traditional C rejects the \”%.*s\” suffix”

传统C 不接受“%.*s”后缀”

suffix for double constant is a GCC extension”

双精度常量后缀是一个GCC 扩展”

invalid suffix \”%.*s\” with hexadecimal floating constant”十六进制浮点常量的“%.*s”后缀无效”

decimal float constants are a GCC extension”

十进制浮点常量是一个GCC 扩展”

invalid suffix \”%.*s\” on integer constant”

整数常量的“%.*s”后缀无效”

use of C++0x lo ng long integer constant”

使用C++0x long long 整数常量”

imaginary constants are a GCC extension”

虚数常量是一个GCC 扩展”

binary constants are a GCC extension”

二进制常量是一个GCC 扩展”

integer constant is too large for its type”

整数常量值超出其类型”

integer constant is so large that it is unsigned”

整数常量太大,认定为unsigned”

missing ‘)’ after \”defined\”"

“defined”后出现‘)’”

operator \”defined\” requires an identifier”

操作符“defined”需要一个标识符”

(\”%s\” is an alternative token for \”%s\” in C++)”(在C++ 中“%s”会是“%s”的替代标识符)”

this use of \”define d\” may not be portable”

使用“defined”可能不利于移植”

floating constant in preprocessor expression”

浮点常量出现在预处理表达式中”

imaginary number in preprocessor expression”

预处理表达式中出现虚数”

\”%s\” is not defined”

“%s”未定义”

assertions are a GCC extension”

断言是一个GCC 扩展”

assertio ns are a deprecated extension”

断言是一个已过时的GCC 扩展”

missing binary operator before token \”%s\”"

标识符“%s”前缺少二元运算符”

token \”%s\” is not valid in preprocessor expressions”标识符“%s”在预处理表达式中无效”

missing expression between ‘(‘ and ‘)’”

‘(’与‘)’之间缺少表达式”

%s with no expression”

%s 后没有表达式”

operator ‘%s’ has no right operand”

操作符‘%s’没有右操作数”

operator ‘%s’ has no left operand”

操作符‘%s’没有左操作数”

‘:’ without preceding ‘?’”

‘:’前没有‘?’”

unbalanced stack in %s”

%s 中堆栈不平衡”

impossible operator ‘%u’”

不可能的操作‘%u’”

missing ‘)’ in expression”

表达式中缺少‘)’”

‘?’ without following ‘:’”

‘?’后没有‘:’”

integer overflow in preprocessor expression”

预处理表达式中整数溢出”

missing ‘(‘ in expression”

表达式中缺少‘(’”

the left operand of \”%s\” changes sign when promoted”“%s”的左操作数在提升时变换了符号”

the right operand of \”%s\” changes sign when promoted”“%s”的右操作数在提升时变换了符号”

traditional C rejects the unary plus operator”

传统C 不接受单目+ 运算符”

comma operator in operand of #if”

#if 操作数中出现逗号”

division by zero in #if”

#if 中用零做除数”

NULL directory in find_file”

find_file 中有NULL 目录”

one or more PCH files were found, but they were invalid”

找到一个或多个PCH 文件,但它们是无效的”

use -Winvalid-pch for more information”

使用-Winvalid-pch 以获得更多信息”

%s is a block device”

%s 是一个块设备”

%s is too large”

%s 过大”

%s is shorter than expected”

%s 短于预期”

no include path in which to search for %s”

没有包含路径可供搜索%s”

Multiple include guards may be useful for:\n”

多个防止重包含可能对其有用:\n”

cppchar_t must be an unsigned type”

cppchar_t 必须是无符号型”

preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits”预处理算术的最高精度为%lu 位;目标需要%lu 位”

CPP arithmetic must be at least as precise as a target int”

CPP 算术必须至少具有目标int 的精度”

target char is less than 8 bits wide”

目标char 短于8 位”

target wchar_t is narrower than target char”

目录wchar_t 短于目标char”

target int is narrower than target char”

目标int 短于目标char”

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”

在此宿主机上,CPP 不能处理长于%lu 位的宽字符常量,但目标需要%lu 位”

backslash and newline separated by space”

反斜杠和换行为空格所分隔”

backslash-newline at end of file”

反斜杠续行出现在文件末尾”

trigraph ??%c converted to %c”

三元符??%c 转换为%c”

trigraph ??%c ignored, use -trigraphs to enable”

三元符??%c 被忽略,请使用-trigraphs 来启用”

\”/*\” within comment”

“/*”出现在注释中”

%s in preprocessing directive”

预处理指示中出现%s”

null character(s) ignored”

忽略空字符”

`%.*s’ is not in NFKC”

‘%.*s’不在NFKC 中”

`%.*s’ is not in NFC”

‘%.*s’不在NFC 中”

attempt to use poisoned \”%s\”"

试图使用有毒的“%s””

__VA_ARGS__ can only appear in the expansion of a C99 variadic macro”

__VA_ARGS__ 只能出现在C99 可变参数宏的展开中”

identifier \”%s\” is a special operator name in C++”

标识符“%s”是C++ 中的一个特殊操作符”

raw string delimiter longer than 16 characters”

原始字符串分隔符长过16 个字符”

invalid character ‘%c’ in raw string delimiter”

原始字符串分隔符中有无效字符‘%c’”

unterminated raw string”

未终止的原始字符串”

null character(s) preserved in literal”

空字符将保留在字面字符串中”

missing terminating %c character”

缺少结尾的%c 字符”

C++ style comments are not allowed in ISO C90″

C++ 风格的注释在ISO C90 中不被允许”

(this will be reported only once per input file)”

(此警告为每个输入文件只报告一次)”

multi-line comment”

多行注释”

unspellable token %s”

无法拼出的标识符%s”

macro \”%s\” is not used”

宏“%s”未被使用”

invalid built-in macro \”%s\”"

无效的内建宏“%s””

could not determine file timestamp”

无法决定文件的时间戳”

could not determine date and time”

无法决定日期与时间”

__COUNTER__ expanded inside directive with -fdirectives-only”带-fdirectives-only 时__COUNTER__ 在指示中扩展”

invalid string literal, ignoring final ‘\\’”

无效的字面字符串,忽略最后的‘\\’”

pasting \”%s\” and \”%s\”does not give a valid preprocessing token”

毗连“%s”和“%s”不能给出一个有效的预处理标识符”

ISO C99 requires rest arguments to be used”

ISO C99 需要使用剩余的参数”

macro \”%s\” requires %u arguments, but only %u given”

宏“%s”需要%u 个参数,但只给出了%u 个”

macro \”%s\” passed %u arguments, but takes just %u”

宏“%s”传递了%u 个参数,但只需要%u 个”

unterminated argument list invoking macro \”%s\”"

调用宏“%s”时参数列表未终止”

function-like macro \”%s\” must be used with arguments in traditional C”

类似函数的宏“%s”在传统C 中必须与参数一起使用”

invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98″

调用宏%s 的参数%d:空的宏参数未被ISO C90 和ISO C++98 定义”

duplicate macro parameter \”%s\”"

重复的宏参数“%s””

\”%s\” may not appear in macro parameter list”

“%s”不能出现在宏参数列表中”

macro parameters must be comma-separated”

宏参数必须由逗号隔开”

parameter name missing”

缺少形参名”

anonymous variadic macros were introduced in C99″

匿名可变参数宏在C99 中被引入”

ISO C does not permit named variadic macros”

ISO C 不允许有名的可变参数宏”

missing ‘)’ in macro parameter list”

在宏参数表中缺少‘)’”

‘##’ cannot appear at either end of a macro expansion”

‘##’不能出现在宏展开的两端”

ISO C99 requires whitespace after the macro name”

ISO C99 要求宏名后必须有空白”

missing whitespace after the macro name”

宏名后缺少空白”

‘#’ is not followed by a macro parameter”

‘#’后没有宏参数”

\”%s\” redefined”

“%s”重定义”

this is the location of the previous definition”

这是先前定义的位置”

macro argument \”%s\” would be stringified in traditional C”宏参数“%s”将在传统 C 中被字符串化”

invalid hash type %d in cpp_macro_definition”

cpp_macro_definition 中有无效的散列类型%d”

while writing precompiled hea der”

在写入预编译头时”

%s: not used because `%.*s’ is poisoned”

%s:未使用因为‘%.*s’已被投毒”

%s: not used because `%.*s’ not defined”

%s:未使用因为‘%.*s’未定义”

%s: not used because `%.*s’ defined as `%s’ not `%.*s’”

%s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’”

%s: not used because `%s’ is defined”

%s:未使用因为‘%s’已定义”

%s: not used because `__COUNTER__’ is invalid”

%s:未使用因为‘__COUNTER__’无效”

while reading precompiled header”

在读取预编译头时”

detected recursion whilst expanding macro \”%s\”"展开宏“%s”时检测到递归”

syntax error in macro parameter list”

宏参数列表语法错误”

#~ warning: ”

#~ 警告:”

#~ internal error: ”

#~ 内部错误:”

#~ error: ”

#~ 错误:”

#~ In file included from %s:%u”

#~ 在包含自%s:%u 的文件中”

#~ ”

#~ “,\n”

#~ ” from %s:%u”

#~ ”

#~ “,\n”

#~ ”从%s:%u”

#~ no newline at end of file”

#~ 文件未以空白行结束”

GCC常见错误解析

GCC常见错误解析 一、错误类型 第一类∶C语法错误 错误信息∶文件source.c中第n行有语法错误(syntex errror)。 这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。 有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。 第二类∶头文件错误 错误信息∶找不到头文件head.h(Can not find include file head.h)。 这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。 第三类∶档案库错误 错误信息∶连接程序找不到所需的函数库,例如∶ld: -lm: No such file or directory. 这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。第四类∶未定义符号 错误信息∶有未定义的符号(Undefined symbol)。 这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc 连接选项中的-l和-L项。 排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述一个算法中所产生的错误,是比较容易排除的。我们写一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,是算法设计有问题,说得更玄点是对问题的认识和理解不够,还需要更加深入地测试、调试和修改。一个程序,稍为复杂的程序,往往要经过多次的编译、连接和测试、修改。 二、常见错误信息解析与处理 1

调试MASM程序技巧及参数详解

1.首先要设置好include、path、lib的路径,可以写成bat文件,如masm安装在D盘,则内容如下 @echo off set include=d:\masm32\Include set lib=d:\masm32\lib set path=d:\masm32\bin;%path% echo on 运行bat文件以后,在dos shell窗口用path命令检查一下。 2.ML问题,对于如下代码, MOV AX, @data MOV DS, AX 编译的时候用ml /c /coff *****.asm 总是出现error A2006: undefined symbol : DGROUP错误信息。 原因在于这种古老的进入程序的代码段的方法在coff格式中已经不用了,因为“/coff ”参数,这是生成32位Windows程序的模块格式,并不适合编译dos程序。至于用什么方法,还得参考PE格式。 COFF –通用对象文件格式(Common Object File Format),是一种很流行的对象文件格式(注意:这里不说它是“目标”文件,是为了和编译器产生的目标文件(*.o/*.obj)相区别,因为这种格式不只用于目标文件,库文件、可执行文件也经常是这种格式)。大家可能会经常使用VC吧?它所产生的目标文件(*.obj)就是这种格式。其它的编译器,如GCC(GNU Compiler Collection)、ICL(Intel C/C++ Compiler)、VectorC,也使用这种格式的目标文件。不仅仅是C/C++,很多其它语言也使用这种格式的对象文件。统一格式的目标文件为混合语言编程带来了极大的方便。 当然,并不是只有这一种对象文件格式。常用格式的还有OMF-对象模型文件(Object Module File)以及ELF-可执行及连接文件格式(Executable and Linking Format)。OMF是一大群IT巨头在n年制定的一种格式,在Windows平台上很常见。大家喜欢的Borland公司现在使用的目标文件就是这种格式。MS和Intel在n年前用的也是这种格式,现在都改投异侧,用COFF格式了。ELF格式在非Windows平台上使用得比较多,在Windows平台基本上没见过。 3.LINK问题 如果用Link /subsystem:(随便哪种系统) *****.obj链接,出现以下提示: LINK : error : Segment reference in fixup record hello.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 问题就出在Linker上,注意两个Linker的不同 Microsoft (R) Segmented Executable Linker Microsoft (R) Incremental Linker 解释一下, Windows平台下, 源代码编译出来的obj主要有两种格式:OMF和COFF, 其中, OMF格式是原来IBM(好像是吧, 不记得了)使用的格式, 而COFF格式则是从微软从UNIX移植过来的, 因为微软公司开发Windows的软件工程师大多对UNIX很熟, 所以自然而然的采用了类似UNIX COFF的这种Win32 COFF格式(和UNIX的"纯种"COFF 是有区别的, 但仍然叫COFF格式) DOS程序编译的obj文件都是omf格式的, omf格式的obj要用Segmented Linker链接, 生成的是DOS可执行文件或者NE文件, 而Win32程序编译的obj必须是COFF格式

gcc编译器使用简明指南

gcc编译器使用简明指南 gcc对文件的处理需要经过预处理->编译->汇编->链接的步骤,从而产生一个可执行文件,各部分对应不同的文件类型,具体如下: file.c c程序源文件 file.i c程序预处理后文件 file.cxx c++程序源文件,也可以是https://www.doczj.com/doc/b912469476.html, / file.cpp / file.c++ file.ii c++程序预处理后文件 file.h c/c++头文件 file.s 汇编程序文件 file.o 目标代码文件 gcc [选项]文件列表 -ansi 强制完全ANSI一致 -c 仅编译或汇编,生成目标代码文件,将.c、.i、.s等文件生成.o文件,其余文件被忽略 -S 仅编译,不进行汇编和链接,将.c、.i等文件生成.s文件,其余文件被忽略 -E 仅预处理,并发送预处理后的.i文件到标准输出,其余文件被忽略 -o file 创建可执行文件并保存在file中,而不是默认文件a.out -g 产生用于调试和排错的扩展符号表,用于GDB调试,切记-g和-O通常不能一起使用 -w 取消所有警告 -W 给出更详细的警告 -O [num]优化,可以指定0-3作为优化级别,级别0表示没有优化 -x language 默认为-x none,即依靠后缀名确定文件类型,加上-x lan确定后面所有文件类型,直到下一个-x出现为止 -D macro[=]类似于源程序里的#define,在-D macro中的macro可被源程序识别,例如gcc -D NUM -D FILE=\"bbs.txt\" hello.c -o hello,第一个-D选项定义宏NUM,在程序中可以使用#ifdef来检查是否被设置,第二个-D定义宏FILE,在源程序中可用 -U macro 类似于源程序开头定义#undef macro,也就是取消源程序中的某个宏定义

gcc 常见的编译警告与错误(按字母顺序排列)

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: #~ 错误: #~ 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’

嵌入式名词解释

1.名词解释 RISC:英文全称是Reduced Instruction Set Computer,中文是精简指令集计算机。特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。CISC:Complex Instruction Set Computer 复杂指令计算机 GPIO:General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。 MTBF:Mean Time Between Failure平均无故障时间,是衡量一个产品的可靠性指标。 E2PROM:EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器。 EPROM:Erasable Programmable Read Only Memory 可擦除可编程只读存储器。 DSP:digital signal processor数字信号处理器 gcc: GNU Compiler Collection GNU编译器套件 MIPS:Million Instructions Per Second 单字长定点指令平均执行速度 DMA: Directional Memory Access直接内存访问 A/D:将模拟信号转换成数字信号的过程称为模数转换(Analog to Digital)或称A/D转换。能够完成这种转换的电路称为模数转化器(Analog Digital Converter),简称ADC. D/A:将数字信号转换成模拟信号的过程称为数模转换(Digital to Analog)或称D/A转换。能够完成这种转换的电路称为数模转化器(Digital Analog Converter),简称DAC. 2. linux 命令 //linux 命令主要参考上课上机的word文档中,考试中90%左右的命令来自于本命令文档。 ●ls列出当前目录下的所有文件和子目录。 ?ls -l; ls -l 列出文件的详细信息.如创建者,创建时间,文件的读写权限列表等 等 ls -a:显示目录下所有文件,包括隐含文件(头部带“.”的文件)。 ?ls -la/-al(就是把前两个合并)列出所有文件(包括隐含文件)的详细信息 ●pwd显示当前目录 ●mkdir一次建立一个或几个目录 ●cp 复制文件和目录 ?cp file1 dir1把文件file1复制到dir1目录下 ?cp file1 file2把file1复制给file2 ●mv移动文件 ?mv file1 file2把file1重命名为file2 ?mv file1 dir1把file1移动到dir1目录下

比特币0.9.2版编译中文手册

比特币0.9.2中文版编译手册 日期:2014-07-01 构建比特币源码,是一件十分费时费力的工作,尤其在windows系统中编译比特币源码更加的麻烦,经过一两天努力,终于在windows7 64位系统中成功编译出了比特币源文件。现在总结如下,首先准备一套干净的windows7 64位操作系统,最好是使用vbox或者vmware 虚拟机建立一个专用系统,这样的可以防止其它干扰导至编译失败,接下来说说,我的编译过程: 1.安装msys系统 msys作用是在windows系统中重建linux系统编译环境,在msys系统下操作,就像linux 中的操作一样,具有相同的语法命令。从下面的网址中下载msys最新版: https://www.doczj.com/doc/b912469476.html,/projects/mingw/files/Installer/mingw-get-setup.exe/download 然后运行mingw-get-setup.exe文件后,选择安装目录为H:\MinGW,之后软件会首先更新下载库,更新成功会弹出一个窗口MinGW installation manager,在这个窗口中,只下载msys相关的包文件,不要下载mingw相关文件,因为不使用它带的这个mingw。 主要如下面所示: msys-base-bin msys-autoconf-bin msys-automake-bin msys-libtool-bin 选择好之后,点击Installation->Apply changes即可。一定要确保mingw包没有被下载,这里我们只需要msys相关系统,也要确保msys-gcc和msys-w32api等包没有被下载,否则当我们执行编译时,可能会调用这些不该出现的包文件,而导至编译失败。 2.安装perl系统 由于在编译比特币时,需要调用一些perl脚本,所以从下面的网址中下载一个perl安装程序,然后安装即可。 https://www.doczj.com/doc/b912469476.html,/ActivePerl/releases/5.18.1.1800/ActivePerl-5.18.1.1800-M SWin32-x64-297570.msi

GCC 命令行详解

GCC 命令行详解 1。gcc包含的c/c++编译器 gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译 2。gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序 gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字 3。为什么会出现undefined reference to 'xxxxx'错误? 首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。 4。-l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。好了现在我们知道怎么得到库名了,比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果

库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R 6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc 目录下,那链接参数就是-L/aaa/bbb/ccc -ltest另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x,/lib/libm.so.6又链接到/lib/libm-2.3.2.so,如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出" -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",这就是编译一个gtk1.2程序所需的gtk链接参数,xx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果。现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。注意`不是单引号,而是1键

详解-C语言可变参数-va-list和-vsnprintf及printf实现

C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢这里我们一起来挖掘一下C语言变长参数的奥秘。 先考虑这样一个问题:如果我们不使用C标准库(libc)中提供的Facilities,我们自己是否可以实现拥有变长参数的函数呢我们不妨试试。 一步一步进入正题,我们先看看固定参数列表函数, void fixed_args_func(int a, double b, char *c) { printf("a = 0x%p\n", &a); printf("b = 0x%p\n", &b); printf("c = 0x%p\n", &c); } 对于固定参数列表的函数,每个参数的名称、类型都是直接可见的,他们的地址也都是可以直接得到的,比如:通过&a我们可以得到a的地址,并通过函数原型声明了解到a是int 类型的; 通过&b我们可以得到b的地址,并通过函数原型声明了解到b是double类型的; 通过&c我们可以得到c的地址,并通过函数原型声明了解到c是char*类型的。 但是对于变长参数的函数,我们就没有这么顺利了。还好,按照C标准的说明,支持变长参数的函数在原型声明中,必须有至少一个最左固定参数(这一点与传统C有区别,传统C允许不带任何固定参数的纯变长参数函数),这样我们可以得到其中固定参数的地址,但是依然无法从声明中得到其他变长参数的地址,比如: void var_args_func(const char * fmt, ... ) { ... ... } 这里我们只能得到fmt这固定参数的地址,仅从函数原型我们是无法确定"..."中有几个参数、参数都是什么类型的,自然也就无法确定其位置了。那么如何可以做到呢在大脑中回想一下函数传参的过程,无论"..."中有多少个参数、每个参数是什么类型的,它们都和固定参数的传参过程是一样的,简单来讲都是栈操作,而栈这个东西对我们是开放的。这样一来,一旦我们知道某函数帧的栈上的一个固定参数的位置,我们完全有可能推导出其他变长参数的位置,顺着这个思路,我们继续往下走,通过一个例子来诠释一下:(这里要说明的是:函数参数进栈以及参数空间地址分配都是"实现相关"的,不同平台、不同编译器都可能不同,所以下面的例子仅在IA-32,Windows XP, MinGW gcc v3.4.2下成立) 我们先用上面的那个fixed_args_func函数确定一下这个平台下的入栈顺序。 int main() { fixed_args_func(17, , "hello world"); return 0; } a = 0x0022FF50 b = 0x0022FF54

GLD中文手册

标题: GLD中文手册--前言 前段时间从每天十多个小时的工作时间中挤出那么点时间完成了NASM手册的翻译,之后得到了汇编版很多朋友的支持与关心,心中非常感激。 但是我们知道,NASM只是一个汇编器,只有它我们还无法完成我们的工作,NASM 功能很强大,能生成很多目标格式的文件,但是得不到我们最终想要的可执行文件。对,我们还需要一个连接器。 可供选择的连接器有很多,它们当中也有很多是免费的,这在NASM的手册中也有介绍,这里我选择的是GNU的连接器ld,为了能更好地使用这个工具,就有了这篇翻译文档。 请不要误会,gld并不只能运行在unix/linux系统下面。GCC的windows版本djgpp带有ld的windows版本,可以通过互联网免费下载。 希望这篇文档能对大家有所帮助,谢谢。 标题: GLD中文手册--(一) 使用ld ******** 本文档介绍GNU连接器ld的2.14版本. 本文档在GNU自由文档许可证下发行.在"GNU自由文档许可证"一章中有关于本 许可证的一份拷贝. 概述 ******** 'ld'把一定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号 引用.一般,在编译一个程序时,最后一步就是运行'ld'. 'ld'能接受连接命令语言文件,这是一种用AT&T的连接编辑命令语言的超集写 成的文件,用来在连接的整个过程中提供显式的,全局的控制. 本版本的'ld'使用通用BFD库来操作目标文件.这就允许'ld'读取,合并,写入目标文件时,可以使用各种不同的格式,比如,COFF或'a.out'. 不同的格式可以被 连接到一起产生一个有效的目标文件. 除了它的灵活性,GNU连接器比其它连接器更有用的地方在于它提供了诊断信息. 许多连接器在碰到一个错误的时候立即放弃执行;但'ld'却能够继续执行,以让 你发现其他的错误(或者,在某些情况下,得到一个带有错误的输出文件) 引用 ********** GNU连接器'ld'能够处理大量的不同情况,并且跟其他的连接器保持尽可能的兼容.这样,你就拥有更多的选择来控制它的行为. 命令行选项 ==================== 连接器提供大量的命令行选项,但是,在实际使用中,只有少数被经常使用.比 如,'ld'的一个经常的使用场合是在一个标准的Unix系统上连接标准的Unix目标文件.在这样的一个系统上,连接文件'hello.o'如下: ld -o OUTPUT /lib/crt0.o hello.o -lc

Object-C 经典入门教程

Object-C 入门教程 分类:Sip&asterisk2009-05-04 16:34 16409人阅读评论(2) 收藏举报大纲 o开始吧下载这篇教学 o设定环境 o前言 o编译 hello world o创建 Classes@interface o@implementation o把它们凑在一起 o详细说明...多重参数 o建构子(Constructors) o访问权限 o Class level access o异常情况(Exceptions)处理 o继承、多型(Inheritance, Polymorphism)以及其他面向对象功 能id 型别 o继承(Inheritance) o动态识别(Dynamic types) o Categories o Posing o Protocols o内存管理Retain and Release(保留与释放) o Dealloc o Autorelease Pool o Foundation Framework ClassesNSArray o NSDictionary ?优点与缺点 ?更多信息 开始吧 下载这篇教学 ?所有这篇初学者指南的原始码都可以由objc.tar.gz下 载。这篇教学中的许多范例都是由 Steve Kochan 在 Programming in Objective-C. 一书中撰写。如果你想得到更 多详细信息及范例,请直接参考该书。这个网站上登载的所有 范例皆经过他的允许,所以请勿复制转载。 设定环境 ?Linux/FreeBSD: 安装GNUStep为了编译 GNUstep

应用程序,必须先执行位于 /usr/GNUstep/System/Makefiles/GNUstep.sh 的 GNUstep.sh 这个档案。这个路径取决于你的系统环境, 有些是在 /usr, some /usr/lib,有些是/usr/local。 如果你的 shell 是以 csh/tcsh 为基础的 shell,则应 该改用 GNUStep.csh。建议把这个指令放在 .bashrc 或 .cshrc 中。 ?Mac OS X: 安装XCode ?Windows NT 5.X: 安装cygwin或mingw,然后安装 GNUStep 前言 ?这篇教学假设你已经有一些基本的 C 语言知识,包括 C 数 据型别、什么是函式、什么是回传值、关于指针的知识以及基 本的 C 语言内存管理。如果您没有这些背景知识,我非常建议 你读一读 K&R 的书:The C Programming Language(译注:台 湾出版书名为 C 程序语言第二版)这是 C 语言的设计者所写 的书。 ?Objective-C,是 C 的衍生语言,继承了所有 C 语言的特 性。是有一些例外,但是它们不是继承于 C 的语言特性本身。 ?nil:在 C/C++ 你或许曾使用过 NULL,而在 Objective-C 中则是 nil。不同之处是你可以传递讯息给 nil(例如 [nil message];),这是完全合法的,然而你却不能对 NULL 如法炮 制。 ?BOOL:C 没有正式的布尔型别,而在 Objective-C 中也不 是「真的」有。它是包含在 Foundation classes(基本类别库) 中(即 import NSObject.h;nil 也是包括在这个头文件内)。 BOOL 在 Objective-C 中有两种型态:YES 或 NO,而不是 TRUE 或 FALSE。 ?#import vs #include:就如同你在 hello world 范例中看 到的,我们使用了#import。#import 由 gcc 编译程序支援。 我并不建议使用 #include,#import基本上跟 .h 档头尾的 #ifndef #define #endif 相同。许多程序员们都同意,使用这 些东西这是十分愚蠢的。无论如何,使用 #import 就对了。这 样不但可以避免麻烦,而且万一有一天 gcc 把它拿掉了,将会 有足够的 Objective-C 程序员可以坚持保留它或是将它放回 来。偷偷告诉你,Apple 在它们官方的程序代码中也使用了 #import。所以万一有一天这种事真的发生,不难预料 Apple 将 会提供一个支持 #import 的 gcc 分支版本。 ?在 Objective-C 中, method 及 message 这两个字是可以 互换的。不过messages 拥有特别的特性,一个 message 可以 动态的转送给另一个对象。在Objective-C 中,呼叫对象上的 一个讯息并不一定表示对象真的会实作这个讯息,而是对象知 道如何以某种方式去实作它,或是转送给知道如何实作的对象。

gcc 常见的编译警告与错误(按字母顺序排列)备课讲稿

g c c常见的编译警告与错误(按字母顺序排 列)

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: #~ 错误: #~ 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 出现在主文件中

valgrind中文手册

/* valgrind-3.5.0 编译和安装技巧 * author: lblong * date : 20100530 * */ 安装步骤: 1、从valgrind官网上获得代码(也可以通过下载tar包获得源代码,可以点击这里下载) https://www.doczj.com/doc/b912469476.html,/downloads/current.html#current 2、进入源代码目录 3、运行./autogen.sh设置环境(需要标准的autoconf工具) 4、运行./configure配置V algrind,具体参数信息详见INSTALL文件。一般只需要设置--prefix=/where/you/want/it/installed 5、make,编译V algrind 6、make install,安装V algrind 详细: 1. linux 环境下执行./configure telstar:/sybase/telstar/user/lblong/memory/valgrind-3.5.0 > ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether to enable maintainer-specific portions of Makefiles... no checking whether ln -s works... yes checking for gcc... cc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether cc accepts -g... yes checking for cc option to accept ANSI C... none needed checking for style of include used by make... GNU checking dependency style of cc... gcc3 checking whether cc understands -c and -o together... yes checking how to run the C preprocessor... cc -E

常见gcc 编译错误整理

常见gcc 编译错误整理(开始)1 1 error: expected expression before 'else' else之前无表达式。 2 error: lvalue required as left operand of assignment 左值问题。 3 error: invalid storage class for function 'XXXXXX' 在文件的某个地方,丢失了一个大括号‘}’。 常见gcc编译警告整理(开始) 1、warning: no newline at end of file 在文件最后一行加上回车键 解释:在《Rationale for 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 Committee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence. c/c++代码的每一行后面有一个“结束符”,也就是newline。避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。 2、warning: comparison between pointer and integer 解释:integer与pointer比较

GCC中文手册

GCC中文手册 GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents NAME gcc,g++-GNU工程的C和C++编译器(egcs-1.1.2) 总览(SYNOPSIS) gcc[option|filename]... g++[option|filename]... 警告(WARNING) 本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义. 除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info 文件是权威文档. 如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU工程认为man手册是过时产物,应该把时间用到别的地方. 如果需要完整和最新的文档,请查阅Info文件`gcc'或Using and Porting GNU CC (for version 2. 0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件gcc.texinfo. 描述(DESCRIPTION)

C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为预处理后的文件(.i)是C文件,并且设定C形式的连接. g++ 认为预处理后的文件(.i)是C++文件,并且设定C++形式的连接. 源文件后缀名指出语言种类以及后期的操作: .c C源程序;预处理,编译,汇编 .C C++源程序;预处理,编译,汇编 .cc C++源程序;预处理,编译,汇编 .cxx C++源程序;预处理,编译,汇编 .m Objective-C源程序;预处理,编译,汇编 .i预处理后的C文件;编译,汇编 .ii预处理后的C++文件;编译,汇编 .s汇编语言源程序;汇编 .S汇编语言源程序;预处理,汇编 .h预处理器文件;通常不出现在命令行上 其他后缀名的文件被传递给连接器(linker).通常包括: .o目标文件(Object file) .a归档库文件(Archive file) 除非使用了-c, -S,或-E选项(或者编译错误阻止了完整的过程),否则连接总是最后的步骤.在连接阶段中,所有对应于源程序的.o文件, -l库文件,无法识别的文件名(包括指定的.o目标文件和.a库文件)按命令行中的顺序传递给连接器.

GCC内联汇编入门

GCC内联汇编入门 分类:linux编程2008-12-21 15:48 507人阅读评论(0) 收藏举报 目录(?)[-] 1. 前言 1. 版权与许可证 2. 回馈与更正 3. 感谢 2. 简介 3. GCC汇编语法 4. 基本内联汇编 5. 扩展内联汇编 1. 汇编程序模板 2. 操作数 3. Clobber列表 4. Volatile 6. 更多关于约束条件 1. 常用的约束 2. 约束修饰符 7. 一些有用的诀窍 8. 结束语 9. 参考 原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误。 中文版说明 由于译者水平有限,故译文出错之处,还请见谅。C语言的关键字不译,一些单词或词组(如colbber等)由于恐怕译后词不达意,故并不翻译,由下面的单词表代为解释,敬请见谅。 英文原文中的单词和词组: operand:操作数,可以是寄存器,内存,立即数。 volatile:易挥发的,是C语言的关键字。 constraint:约束。 register:本文指CPU寄存器。 asm:“asm”和“__asm__”在C语言中是关键字。原文中经常出现这个单词,是指嵌入到C语言(或者其它语言)的汇编程序片断。 basic inline assembly:指C语言中内联汇编程序的一种形式,和extended asm对 应。基本格式如下:

asm("assembly code"); extended assembly:和basic inline assembly对应,比它多了一些特性,如可以指明输入,输出等。基本格式如下: asm ( assembler template : output operands : input operands : list of clobbered registers ); clobber list:实际上就是被使用的寄存器的列表,用来告诉GCC它们已经被asm 使用了,不要在asm程序外使用它们。不然可能带来不可预见的后 果。 clobbered registers:它和clobber list对应。 assembler template:就是汇编模板,所有内联汇编代码都有按一定的格式。 见extended assembly的说明 作者:Sandeep.S 译者:吴遥 版本号 v0.1 2003年3月01日 翻译版更新日期 2008/06/11 这篇HOWTO解释GCC提供的内联汇编特性的用途和用法。学习这篇文章只须具备两个前提条件,显然那就是对x86汇编语言和C语言有基本的了解。 目录 1.前言 1.1版权与许可证 1.2回馈与更正 1.3感谢 2.简介 3.GCC汇编语法 4.基本内联汇编 5.扩展内联汇编 5.1汇编程序模板 5.2操作数 5.3 Clobber列表 5.4 Volatile … ? 6.更多关于约束条件

相关主题
文本预览
相关文档 最新文档