




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、G+ 中文使用教程简介 gcc and g+分别是GNU的c & c+编译器gcc/g+在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件预处理器cpp 2.将预处理后的文件不转换成汇编语言,生成文件.s编译器egcs 3.有汇编变为目标代码(机器代码)生成.o的文件汇编器as 4.连接目标代码,生成可执行程序链接器ld 操作指南参数详解 -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根 据约定C语言的后缀名称是.c的,而C+的后缀名是.C或者.cpp,如果 你很个性,决
2、定你的C代码文件的后缀名是.pig 哈哈,那你就要用这 简介 gcc and g+分别是GNU的c & c+编译器gcc/g+在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件预处理器cpp 2.将预处理后的文件不转换成汇编语言,生成文件.s编译器egcs 3.有汇编变为目标代码(机器代码)生成.o的文件汇编器as 4.连接目标代码,生成可执行程序链接器ld 操作指南参数详解 -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根 据约定C语言的后缀名称是.c的,而C+的后缀名
3、是.C或者.cpp,如果 你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这 个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数 的使用。 可以使用的参数吗有下面的这些 c', objective-c', c-header', c+', cpp-output', assembler', and assembler-with-cpp'. 看到英文,应该可以理解的。 例子用法: gcc -x c hello.pig -x none filename 关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型 例子
4、用法: gcc -x c hello.pig -x none hello2.c -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 例子用法: gcc -c hello.c 他将生成.o的obj文件 -S 只激活预处理和编译,就是指把文件编译成为汇编代码。 例子用法 gcc -S hello.c 他将生成.s的汇编代码,你可以用文本编辑器察看 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 面. 例子用法: gcc -E hello.c > pianoapan.txt gcc -E hello.c | more 慢慢看吧,一个hello word 也要
5、与处理成800行的代码 -o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果 你和我有同感,改掉它,哈哈 例子用法 gcc -o hello.exe hello.c (哦,windows用习惯了) gcc -o hello.asm -S hello.c -pipe 使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问 题 gcc -pipe -o hello.exe hello.c -ansi 关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一 些asm inline typeof关键字,以及UNIX,vax等预处理宏
6、, -fno-asm 此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作 关键字。 -fno-strict-prototype 只对g+起作用,使用这个选项,g+将对不带参数的函数,都认为是没有显式 的对参数的个数和类型说明,而不是没有参数. 而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说 明的类型 -fthis-is-varialble 就是向传统c+看齐,可以使用this当一般变量使用. -fcond-mismatch 允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型 -funsigned-char -fno-s
7、igned-char -fsigned-char -fno-unsigned-char 这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前 两个参数)或者 signed char(后两个参数) -include file 包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以 用它设定,功能就相当于在代码中使用#include<filename> 例子用法: gcc hello.c -include /root/pianopan.h -imacros file 将file文件的宏,扩展到gcc/g+的输入文件,宏定义本身并不出
8、现在输入文件 中 -Dmacro 相当于C语言中的#define macro -Dmacro=defn 相当于C语言中的#define macro=defn -Umacro 相当于C语言中的#undef macro -undef 取消对任何非标准宏的定义 -Idir 在你是用#include"file"的时候,gcc/g+会先在当前目录查找你所制定的头 文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他 回先在你所制定的目录查找,然后再按常规的顺序去找. 对于#include<file>,gcc/g+会到-I制定的目录查找,查找不到,然后将
9、到系 统的缺省的头文件目录查找 -I- 就是取消前一个参数的功能,所以一般在-Idir之后使用 -idirafter dir 在-I的目录里面查找失败,讲到这个目录里面查找. -iprefix prefix -iwithprefix dir 一般一起使用,当-I的目录查找失败,会到prefix+dir下查找 -nostdinc 使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确 限定头文件的位置 -nostdin C+ 规定不在g+指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建 libg+库使用 -C 在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程
10、序,用这个很 方便的 -M 生成文件关联的信息。包含目标文件所依赖的所有源代码 你可以用gcc -M hello.c来测试一下,很简单。 -MM 和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。 -MD 和-M相同,但是输出将导入到.d的文件里面 -MMD 和-MM相同,但是输出将导入到.d的文件里面 -Wa,option 此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选 项,然后传递给会汇编程序 -Wl.option 此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选 项,然
11、后传递给会连接程序. -llibrary 制定编译的时候使用的库 例子用法 gcc -lcurses hello.c 使用ncurses库编译程序 -Ldir 制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然 编译器将只在标准库的目录找。这个dir就是目录的名称。 -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最 高 -g 只是编译器,在编译的时候,产生调试信息。 -gstabs 此选项以stabs格式声称调试信息,但是不包括gdb调试信息. -gstabs+ 此选项以stabs格式声称调试信息,并且包含仅供g
12、db使用的额外调试信息. -ggdb 此选项将尽可能的生成gdb的可以使用的调试信息. -static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么 动态连接库,就可以运行. -share 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. -traditional 试图让编译器支持传统的C语言特性 GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的 前端图形工具,称为 xxgdb。gdb 是功能强大的调试程序,可完成如下的调试任务: * 设置断点; * 监视程序变量的值; * 程序的
13、单步执行; * 修改变量的值。 在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量: CFLAGS = -g 运行 gdb 调试程序时通常使用如下的命令: gdb progname 在 gdb 提示符处键入help,将列出命令的分类,主要的分类有: * aliases:命令别名 * breakpoints:断点定义; * data:数据查看; * files:指定并查看文件; * internals:维护命令; * running:程序执行; * stack:调用栈查看; * statu:状态查看; * tracepoint
14、s:跟踪程序执行。 键入 help 后跟命令的分类名,可获得该类命令的详细清单。 #DENO# gdb 的常用命令 表 1-4 常用的 gdb 命令 命令 解释 break NUM 在指定的行上设置断点。 bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。 continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。 display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。 file FILE 装载指定的可执行文件进行调试。
15、help NAME 显示指定命令的帮助信息。 info break 显示当前断点清单,包括到达断点处的次数等。 info files 显示被调试文件的详细信息。 info func 显示所有的函数名称。 info local 显示当函数中的局部变量信息。 info prog 显示被调试程序的执行状态。 info var 显示所有的全局和静态变量名称。 kill 终止正被调试的程序。 list 显示源代码段。 make 在不退出 gdb 的情况下运行 make 工具。 next 在不单步执行进入其他函数的情况下,向前执行一行源代码。 print EXPR 显示表达式 EXPR 的值。 1.8.5
16、 gdb 使用范例 - 清单 一个有错误的 C 源程序 bugging.c - #include #include static char buff 256; static char* string; int main () printf ("Please input a string: "); gets (string); printf ("nYour string is: %sn", string); - 上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初 始化的字符串地址 string,因此,编译并运行
17、之后,将出现 Segment Fault 错误: $ gcc -o test -g test.c $ ./test Please input a string: asfd Segmentation fault (core dumped) 为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行: 1运行 gdb bugging 命令,装入 bugging 可执行文件; 2执行装入的 bugging 命令; 3使用 where 命令查看程序出错的地方; 4利用 list 命令查看调用 gets 函数附近的代码; 5唯一能够导致 gets 函数出错的因素就是变量 string。用 prin
18、t 命令查看 string 的值; 6在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第 11 行处设置断点; 7程序重新运行到第 11 行处停止,这时,我们可以用 set variable 命令修改 string 的取值; 8然后继续运行,将看到正确的程序运行结果。 如何使用gcc编译器?作者:Zhang Wei 翻译 2004-10-05 20:24:41 来自:linuxfocus目录: · GCC rules · 开始. · 预编译 · 编译 · 汇编 · 连接
19、3; 另外两个重要选项 · 调试 · 小结 · 站点链接 摘要: 要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码。然后,我们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程。我们也简要介绍了调试器的使用方法。 GCC rules 你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知道编译器在你的可执行文件中加入了什么?可能会加入各种后门和木马。Ken Thompson是一个著名的黑客,他编写了一个编译器,当编译器编译自己时,就在'
20、;login'程序中留下后门和永久的木马。请到 这里 阅读他对这个杰作的描述。幸运的是,我们有了gcc。当你进行 configure; make; make install 时, gcc在幕后做了很多繁重的工作。如何才能让gcc为我们工作呢?我们将开始编写一个纸牌游戏,不过我们只是为了演示编译器的功能,所以尽可能地精简了代码。我们将从头开始一步一步地做,以便理解编译过程,了解为了制作可执行文件需要做些什么,按什么顺序做。我们将看看如何编译C程序,以及如何使用编译选项让gcc按照我们的要求工作。步骤(以及所用工具)如下: 预编译 (gcc -E), 编译 (gcc), 汇编 (as),和
21、 连接 (ld)。 开始. 首先,我们应该知道如何调用编译器。实际上,这很简单。我们将从那个著名的第一个C程序开始。(各位老前辈,请原谅我)。 #include <stdio.h>int main() printf("Hello World!n");把这个文件保存为 game.c。 你可以在命令行下编译它: gcc game.c在默认情况下,C编译器将生成一个名为 a.out 的可执行文件。你可以键入如下命令运行它: a.outHello World每一次编译程序时,新的 a.out 将覆盖原来的程序。你无法知道是哪个程序创建了 a.out。我们可
22、以通过使用 -o 编译选项,告诉 gcc我们想把可执行文件叫什么名字。我们将把这个程序叫做 game,我们可以使用任何名字,因为C没有Java那样的命名限制。 gcc -o game game.cgameHello World到现在为止,我们离一个有用的程序还差得很远。如果你觉得沮丧,你可以想一想我们已经编译并运行了一个程序。因为我们将一点一点为这个程序添加功能,所以我们必须保证让它能够运行。似乎每个刚开始学编程的程序员都想一下子编一个1000行的程序,然后一次修改所有的错误。没有人,我是说没有人,能做到这个。你应该先编一个可以运行的小程序,修改它,然后再次让它运行。这可以限制你一次修改的错误
23、数量。另外,你知道刚才做了哪些修改使程序无法运行,因此你知道应该把注意力放在哪里。这可以防止这样的情况出现:你认为你编写的东西应该能够工作,它也能通过编译,但它就是不能运行。请切记,能够通过编译的程序并不意味着它是正确的。 下一步为我们的游戏编写一个头文件。头文件把数据类型和函数声明集中到了一处。这可以保证数据结构定义的一致性,以便程序的每一部分都能以同样的方式看待一切事情。 #ifndef DECK_H#define DECK_H#define DECKSIZE 52typedef struct deck_t int cardDECKSIZE; /* number of cards used
24、 */ int dealt;deck_t;#endif /* DECK_H */把这个文件保存为 deck.h。只能编译 .c 文件,所以我们必须修改 game.c。在game.c的第2行,写上 #include "deck.h"。在第5行写上 deck_t deck;。为了保证我们没有搞错,把它重新编译一次。 gcc -o game game.c如果没有错误,就没有问题。如果编译不能通过,那么就修改它直到能通过为止。 预编译 编译器是怎么知道 deck_t 类型是什么的呢?因为在预编译期间,它实际上把"deck.h"文件复制到了"
25、;game.c"文件中。源代码中的预编译指示以"#"为前缀。你可以通过在gcc后加上 -E 选项来调用预编译器。 gcc -E -o game_precompile.txt game.cwc -l game_precompile.txt 3199 game_precompile.txt几乎有3200行的输出!其中大多数来自 stdio.h 包含文件,但是如果你查看这个文件的话,我们的声明也在那里。如果你不用 -o 选项指定输出文件名的话,它就输出到控制台。预编译过程通过完成三个主要任务给了代码很大的灵活性。 1. 把"include"的文件拷贝
26、到要编译的源文件中。 2. 用实际值替代"define"的文本。 3. 在调用宏的地方进行宏替换。 这就使你能够在整个源文件中使用符号常量(即用DECKSIZE表示一付牌中的纸牌数量),而符号常量是在一个地方定义的,如果它的值发生了变化,所有使用符号常量的地方都能自动更新。在实践中,你几乎不需要单独使用 -E 选项,而是让它把输出传送给编译器。 编译 作为一个中间步骤,gcc把你的代码翻译成汇编语言。它一定要这样做,它必须通过分析你的代码搞清楚你究竟想要做什么。如果你犯了语法错误,它就会告诉你,这样编译就失败了。人们有时会把这一步误解为整个过程。但是,实际上还
27、有许多工作要gcc去做呢。 汇编 as 把汇编语言代码转换为目标代码。事实上目标代码并不能在CPU上运行,但它离完成已经很近了。编译器选项 -c 把 .c 文件转换为以 .o 为扩展名的目标文件。 如果我们运行 gcc -c game.c我们就自动创建了一个名为game.o的文件。这里我们碰到了一个重要的问题。我们可以用任意一个 .c 文件创建一个目标文件。正如我们在下面所看到的,在连接步骤中我们可以把这些目标文件组合成可执行文件。让我们继续介绍我们的例子。因为我们正在编写一个纸牌游戏,我们已经把一付牌定义为 deck_t,我们将编写一个洗牌函数。这个函数接受一个指向deck类型
28、的指针,并把一付随机的牌装入deck类型。它使用'drawn' 数组跟踪记录那些牌已经用过了。这个具有DECKSIZE个元素的数组可以防止我们重复使用一张牌。 #include <stdlib.h>#include <stdio.h>#include <time.h>#include "deck.h"static time_t seed = 0;void shuffle(deck_t *pdeck) /* Keeps track of what numbers have been used */ int drawnDECK
29、SIZE = 0; int i; /* One time initialization of rand */ if(0 = seed) seed = time(NULL); srand(seed); for(i = 0; i < DECKSIZE; i+) int value = -1; do value = rand() % DECKSIZE; while(drawnvalue != 0); /* mark value as used */ drawnvalue = 1; /* debug statement */ printf("%in", value); pde
30、ck->cardi = value; pdeck->dealt = 0; return;把这个文件保存为 shuffle.c。我们在这个代码中加入了一条调试语句,以便运行时,能输出所产生的牌号。这并没有为我们的程序添加功能,但是现在到了关键时刻,我们看看究竟发生了什么。因为我们的游戏还在初级阶段,我们没有别的办法确定我们的函数是否实现了我们要求的功能。使用那条printf语句,我们就能准确地知道现在究竟发生了什么,以便在开始下一阶段之前我们知道牌已经洗好了。在我们对它的工作感到满意之后,我们可以把那一行语句从代码中删掉。这种调试程序的技术看起来很粗糙,但它使用最少的语句完成了调试任
31、务。以后我们再介绍更复杂的调试器。 请注意两个问题。 1. 我们用传址方式传递参数,你可以从'&'(取地址)操作符看出来。这把变量的机器地址传递给了函数,因此函数自己就能改变变量的值。也可以使用全局变量编写程序,但是应该尽量少使用全局变量。指针是C的一个重要组成部分,你应该充分地理解它。 2. 我们在一个新的 .c 文件中使用函数调用。操作系统总是寻找名为'main'的函数,并从那里开始执行。 shuffle.c 中没有'main'函数,因此不能编译为独立的可执行文件。我们必须把它与另一个具有'main'函数并调用'
32、;shuffle'的程序组合起来。 运行命令 gcc -c shuffle.c并确定它创建了一个名为 shuffle.o 的新文件。编辑game.c文件,在第7行,在 deck_t类型的变量 deck 声明之后,加上下面这一行: shuffle(&deck);现在,如果我们还象以前一样创建可执行文件,我们就会得到一个错误 gcc -o game game.c/tmp/ccmiHnJX.o: In function main':/tmp/ccmiHnJX.o(.text+0xf): undefined reference to shuffle'collect2:
33、ld returned 1 exit status编译成功了,因为我们的语法是正确的。但是连接步骤却失败了,因为我们没有告诉编译器'shuffle'函数在哪里。那么,到底什么是连接?我们怎样告诉编译器到哪里寻找这个函数呢? 连接 连接器ld,使用下面的命令,接受前面由 as 创建的目标文件并把它转换为可执行文件 gcc -o game game.o shuffle.o这将把两个目标文件组合起来并创建可执行文件 game。 连接器从shuffle.o目标文件中找到 shuffle 函数,并把它包括进可执行文件。目标文件的真正好处在于,如果我们想再次使用那个函数,我们
34、所要做的就是包含"deck.h" 文件并把 shuffle.o 目标文件连接到新的可执行文件中。 象这样的代码重用是经常发生的。虽然我们并没有编写前面作为调试语句调用的 printf 函数,连接器却能从我们用 #include <stdlib.h> 语句包含的文件中找到它的声明,并把存储在C库(/lib/libc.so.6)中的目标代码连接进来。这种方式使我们可以使用已能正确工作的其他人的函数,只关心我们所要解决的问题。这就是为什么头文件中一般只含有数据和函数声明,而没有函数体。一般,你可以为连接器创建目标文件或函数库,以便连接进可执行文件。我们的代码可能产生问
35、题,因为在头文件中我们没有放入任何函数声明。为了确保一切顺利,我们还能做什么呢? 另外两个重要选项 -Wall 选项可以打开所有类型的语法警告,以便帮助我们确定代码是正确的,并且尽可能实现可移植性。当我们使用这个选项编译我们的代码时,我们将看到下述警告: game.c:9: warning: implicit declaration of function shuffle'这让我们知道还有一些工作要做。我们需要在头文件中加入一行代码,以便告诉编译器有关 shuffle 函数的一切,让它可以做必要的检查。听起来象是一种狡辩,但这样做 可以把函数的定义与实现分离开来,使我们能
36、在任何地方使用我们的函数,只要包含新的头文件 并把它连接到我们的目标文件中就可以了。下面我们就把这一行加入deck.h中。 void shuffle(deck_t *pdeck);这就可以消除那个警告信息了。 另一个常用编译器选项是优化选项 -O# (即 -O2)。 这是告诉编译器你需要什么级别的优化。编译器具有一整套技巧可以使你的代码运行得更快一点。对于象我们这种小程序,你可能注意不到差别,但对于大型程序来说,它可以大幅度提高运行速度。你会经常碰到它,所以你应该知道它的意思。 调试 我们都知道,代码通过了编译并不意味着它按我们得要求工作了。你可以使用下面的命令验证是否所有的号码
37、都被使用了 game | sort - n | less并且检查有没有遗漏。如果有问题我们该怎么办?我们如何才能深入底层查找错误呢? 你可以使用调试器检查你的代码。大多数发行版都提供著名的调试器:gdb。如果那些众多的命令行选项让你感到无所适从,那么你可以使用KDE提供的一个很好的前端工具 KDbg。还有一些其它的前端工具,它们都很相似。要开始调试,你可以选择 File->Executable 然后找到你的 game 程序。当你按下F5键或选择 Execution->从菜单运行时,你可以在另一个窗口中看到输出。怎么回事?在那个窗口中我们什么也看不到。不要担心,KDbg没有出问题。问
38、题在于我们在可执行文件中没有加入任何调试信息,所以KDbg不能告诉我们内部发生了什么。编译器选项 -g 可以把必要的调试信息加入目标文件。你必须用这个选项编译目标文件(扩展名为.o),所以命令行成了: gcc -g -c shuffle.c game.cgcc -g -o game game.o shuffle.o这就把钩子放入了可执行文件,使gdb和KDbg能指出运行情况。调试是一种很重要的技术,很值得你花时间学习如何使用。调试器帮助程序员的方法是它能在源代码中设置“断点”。现在你可以用右键单击调用 shuffle 函数的那行代码,试着设置断点。那一行边上会出现一个红色的小圆圈。现在当你按下
39、F5键时,程序就会在那一行停止执行。按F8可以跳入shuffle函数。呵,我们现在可以看到 shuffle.c 中的代码了!我们可以控制程序一步一步地执行,并看到究竟发生了什么事。如果你把光标暂停在局部变量上,你将能看到变量的内容。太好了。这比那条 printf 语句好多了,是不是? 小结 本文大体介绍了编译和调试C程序的方法。我们讨论了编译器走过的步骤,以及为了让编译器做这些工作应该给gcc传递哪些选项。我们简述了有关连接共享函数库的问题,最后介绍了调试器。真正了解你所从事的工作还需要付出许多努力,但我希望本文能让你正确地起步。你可以在 gcc、 as 和 ld的 man 和
40、info page中找到更多的信息。 自己编写代码可以让你学到更多的东西。作为练习你可以以本文的纸牌游戏为基础,编写一个21点游戏。那时你可以学学如何使用调试器。使用GUI的KDbg开始可以更容易一些。如果你每次只加入一点点功能,那么很快就能完成。切记,一定要保持程序一直能运行! 要想编写一个完整的游戏,你需要下面这些内容: · 一个纸牌玩家的定义(即,你可以把deck_t定义为player_t)。 · 一个给指定玩家发一定数量牌的函数。记住在纸牌中要增加“已发牌”的数量,以便能知道还有那些牌可发。还要记住玩家手中还有多少牌。 · 一些与用户的交互,问问玩家是否还
41、要另一张牌。 · 一个能打印玩家手中的牌的函数。 card 等于value % 13 (得数为0到12),suit 等于 value / 13 (得数为0到3)。 · 一个能确定玩家手中的value的函数。Ace的value为零并且可以等于1或11。King的value为12并且可以等于10。 g+的使用 C+中的一些文件后缀.a静态库 (archive).C.c.cc.cp.cpp.cxxC+源代码(需要编译预处理).hC或者C+源代码头文件.iiC+源代码(不需编译预处理).o对象文件.s汇编语言代码.so动态库<none>标准C+系统头文件从单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C+ 程序的代码:1234567/* helloworld.cpp */#include <iostream>int main(int argc,char *argv) std:cout << "hello, worldn" return(0);程序使用标准输入流对象cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:$ g+ helloworld.cpp编译器 g+ 通过检查命令行中指定的文件的后缀名可识别其为 C+ 源代码文件。编译器默认的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省陇南市文县三校联考2024~2025学年 高三下册三月联考数学试卷附解析
- 新外研版英语7年级上册全册教学课件
- 黑色金属冶炼市场趋势分析-洞察阐释
- 2024年昭通市消防救援支队招录政府专职消防员真题
- 2024年和田地区大学生乡村医生专项计划招聘真题
- 成都天府新区顾连禾泰康复医院招聘笔试真题2024
- 2024年广西英华国际职业学院辅导员考试真题
- 历史地理角色设计师基础知识点归纳
- 2025年二级建造师理论试题
- 参数化贝叶斯推断在生物学和医学中的应用-洞察阐释
- GB/T 27021.1-2017合格评定管理体系审核认证机构要求第1部分:要求
- 第6课 从隋唐盛世到五代十国 课件【高效备课+精讲精研】高中历史统编版(2019)必修中外历史纲要上册
- 浙江工商大学-汇报答辩通用PPT模板
- 药品短缺情况登记表
- 住房公积金未婚声明书
- 跨文化沟通分解课件
- 2023年北京中考地理试卷及答案
- 跨境电子商务实训
- 新苏科版八年级下册初中数学 7.2 统计图的选用课时练(课后作业设计)
- 儿童学习困难课件
- 护生入科宣教
评论
0/150
提交评论