下面小编为大家整理了C 编译器 GCC 简单教程,本文共5篇,欢迎阅读与借鉴!本文原稿由网友“你是苹果我是梨”提供。
篇1:C 编译器 GCC 简单教程
前言
Linux的发行版中包含了很多软件开发工具. 它们中的很多是用于 C 和 C++应用程序开发的. 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具. 本文的主旨是介绍如何在 Linux 下使用 C 编译器和其他 C 编程工具, 而非 C 语言编程的教程. 在本文中你将学到以下知识:
什么是 C
GNU C 编译器
什么是 C?
C 是一种在 UNIX 操作系统的早期就被广泛使用的通用编程语言. 它最早是由贝尔实验室的 Dennis Ritchie 为了 UNIX 的辅助开发而写的, 开始时 UNIX 是用汇编语言和一种叫 B 的语言编写的. 从那时候起, C 就成为世界上使用最广泛计算机语言.
C 能在编程领域里得到如此广泛支持的原因有以下一些:
它是一种非常通用的语言. 几乎你所能想到的任何一种计算机上都有至少一种能用的 C 编译器. 并且它的语法和函数库在不同的平台上都是统一的, 这个特性对开发者来说很有吸引力.
用 C 写的程序执行速度很快.
C 是所有版本的UNIX上的系统语言.
C 在过去的二十年中有了很大的发展. 在80年代末期美国国家标准协会(American National Standards Institute)发布了一个被称为 ANSI C 的 C 语言标准.这更加保证了将来在不同平台上的 C 的一致性. 在80年代还出现了一种 C 的面向对象的扩展称为 C++. C++ 将在另一篇文章 “C++ 编程”中描述.
Linux 上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础上, 因此可以自由发布. 你能在 Linux 的发行光盘上找到它.
GNU C 编译器
随 Slackware Linux 发行的 GNU C 编译器(GCC)是一个全功能的 ANSI C 兼容编译器. 如果你熟悉其他操作系统或硬件平台上的一种 C 编译器, 你将能很快地掌握 GCC. 本节将介绍如何使用 GCC 和一些 GCC 编译器最常用的选项.
使用 GCC
通常后跟一些选项和文件名来使用 GCC 编译器. gcc 命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的操作将在命令行上每个给出的文件上执行. 下一小节将叙述一些你会最常用到的选项.
GCC 选项
GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:
gcc -p -g test.c
gcc -pg test.c
第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉 GCC 为 gprof 命令建立剖析信息.
当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为 a.out 的可执行文件. 例如, 下面的命令将在当前目录下产生一个叫 a.out 的文件:
gcc test.c
你能用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out. 例如, 将一个叫 count.c 的 C 程序编译为名叫 count 的可执行文件, 你将输入下面的命令:
gcc -o count count.c
--------------------------------------------------------------------------------
注意: 当你使用 -o 选项时, -o 后面必须跟一个文件名.
--------------------------------------------------------------------------------
GCC 同样有指定编译器处理多少的编译选项. -c 选项告诉 GCC 仅把源代码编译为目标代码而跳过连接程序的步骤. 这个选项使用的非常频繁因为它使得编译多个 C 程序时速度更快并且更易于管理. 缺省时 GCC 建立的目标代码文件有一个 .o 的扩展名.
-S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译. GCC 产生的汇编语言文件的缺省扩展名是 .s . -E 选项指示编译器仅对输入文件进行预处理. 当这个选项被使用时, 预处理器的输出被送到标准输出而不是储存在文件里.
优 化 选 项
当你用 GCC 编译 C 代码时, 它会试着用最少的时间完成编译并且使编译后的代码易于调试. 易于调试意味着编译后的代码与源代码有同样的执行次序, 编译后的代码没有经过优化.
使用选项 -O[level] 可指定 GCC 对目标代码进行优化,
C 编译器 GCC 简单教程
,
注意,是大写字母 0。[level] 可以省略,也可以是 0(数字 0)、1、2、3,或者 s 。-O 默认是 -O0。数字越大优化程度越高,同时需要的编译时间也越长。
关于这些选项的详细描述,请参考 GCC 的指南页(命令行上键入 man gcc)。
篇2:C编译器的设计
C-编译器的设计
作者:陆晓春
下载设计文档与代码
前言:这个是我们这学期编译课所要求的大程,我做的是一个C-的编译器,功能不多,但运行正常,开发步骤比较明确,希望与大家共享,
编译器运行效果图如下:
设计文档基本内容如下:
1) 整体框架
2) 词法分析
Class CTokenizer
Class CScaner
C关键字表
标识符词法
3) 语法分析
Class CParser
Grammar
基本树形结构
支持的语句及运算
4) 建立符号表
Class LineListRec
Class BucketListRec
Class CSymbolTable
Class CFunArgsCheck
5) 类型检测
Class CAnalyzer
类型匹配
函数调用参数检测
6) 代码生成
PCode
80X86 ASM
7) 总结
详细内容请阅读本文提供的设计文档与全部源代码,
篇3:c语言教程:CategoryOC
Category 书上翻译为目录 [系统类的扩展]
(1)实现继承之外的扩展方法机制
(2)Category使用方法
(3)字符串翻转方法Category扩展
(4)让函数私有化
(1)实现继承之外的扩展方法机制
在一个类里面拓展一些方法进去
1、能把一个类的实现分为若干不同文件中,
<1>c/c++无法实现的,把类实现分到若干文件中实现。
<2>或者现有的类中拓展一些方法进去。
以前是用继承方法在里面实现一些方法,现在只要在字符串类中拓展一些方法就好。[用系统类中动态的添加一些方法]
<3>公司经常问Category 与 继承有什么区别呢?
Category 不能完全替代继承,但是它能够做很多继承做不了的事情,写起来比继承麻烦,但使用起来比较好用。
2、每个Category 是类的一部分
3、类的不同类别可以单独编译(可以让不同开发者负责一个Category )
4、如果把一个类Category (申明和实现)放到一个.m文件中,那么该Category 外界不能访问。这样实现类似c++中的 class的private功能。
5、Category 实际上就是对类的扩展。
Category 的缺点:
只能扩展函数,消息,不能扩展字符段,变量等[所以说不能替代继承]
Category 命名规范:
一般:
要扩展的类名+扩展变量.[h/m]
比如:
NSString + ReverseString.h
NSString + ReverseString.m
unichar == unsigned short 两个字节,
电脑资料
“%C” 这个C是大c,和语音中的c不一样。
appendString 添加到字符串里。
实现.m函数私有化[只给.m函数提供调用
@interface Foo (Private)//这样声明
-(void) test2;
@end
@implementation Foo
-(void) test
{
[self test2];
}
-(void) test2
{
NSLog(@“test2 is calling”);
}
@end
(2)Category使用方法
(3)字符串翻转方法Category扩展
篇4:把其他C/C++编译器集成到VC中
在Visual C++ 2005中,如何调用其它编译器编译cpp文件呢? 换句话说,如何把其它编译器集成到VC2005的IDE中呢?
象IIC这样的编译器安装之后会自动集成进来,要集成其他编译器那还得自己动手,下面介绍一种简单的方法。
另外,在VC2005的IDE中是不能编译单个.cpp文件的,除非把它放在工程中。但是,我们可以通过调用外部工具实现编译单文件。
把cl.exe添加到外部工具的方法这里就不介绍了,大家参照下面添加gcc的方法,再查阅cl.exe的参数说明,就能试着添加进来。
下面以调用G++为例说明如何编译cpp文件。如果要编译单个.c文件,使用gcc即可,方法同理。
首先获取Windows版的 GNU C++ Compiler (g++)。你可以通过安装 Cygwin 或者 MinGW 来获得 g++ for Windows.
以MinGW为例,我们可以下载Dev C++, Dev C++目前最新版为4.9.9.2。安装 Dev C++的同时就安装了MinGW,其中包含了 G++ 3.4.2,
假设 Dev C++ 安装在 D:\\Dev-Cpp 目录下。
下面我们在VC2005的菜单点击 “工具(Tools) ->外部工具(External Tools) ->添加(Add)”。
分别填入:
标题(Title): GNU C++ Compiler
命令(Command): D:\\Dev-Cpp\\bin\\g++.exe
参数(Arguments): -Wall -o $(ItemFileName) $(ItemFileName)$(ItemExt) -time
初始目录(Initial directory): $(ItemDir)
再钩选下面的“使用输出窗口(Use Output window)”.
说明:如果你已经把D:\\Dev-Cpp\\bin\\目录添加到系统环境变量中,那么 Command指定为g++.exe即可。Cygwin同理。
这些参数只是一个参考。你可以查阅VC编译器的宏设置你需要的参数。
干脆顺带补充一下Digital Mars C++编译器的参考参数设置:
标题(Title): Digital Mars
命令(Command): C:\\dm\\bin\\dmc.exe
参数(Arguments): $(ItemFileName) $(ItemFileName)$(ItemExt)
初始目录(Initial directory): $(ItemDir)
下面切换到main函数所在文件,点击工具(Tools)菜单下的“GNU C++ Compiler”开始编译。
注意g++此时编译的指是纯C++程序,对于包含 int _tmain(int argc, _TCHAR* argv[]) 这类VC特有的C++程序自然是无法通过编译的,
如果编译没有出错,对于早期版本的g++而言,Output window是没有任何输出的。
而对于较新版本的g++,将输出类似以下的信息:
# cc1plus 0.67 0.22
# as 0.05 0.01
# collect2 0.36 0.19
这是 -time 报告的编译过程中每个子过程所占用的CPU时间。
当然,你还可以更改编译参数,使输出窗口输出其他编译信息。
我们还可以通过添加外部工具来实现运行g++生成的程序的功能。步骤如下:
在VC2005的菜单点击“工具(Tools) ->外部工具(External Tools) ->添加(Add)”。
分别填入:
标题(Title): Run as C++ Application
命令(Command): %systemroot%\\system32\\cmd.exe
参数(Arguments): /c $(ItemFileName).exe
初始目录(Initial directory): $(ItemDir)
不要钩选下面的“使用输出窗口”和“退出时关闭”。
注意:cpp文件必须放在工程中,g++生成的程序才能被运行!
另外,用MinGW的g++编译的程序不能在没有安装MinGW的Windows系统上运行。因为它依赖于MinGW库。
即便是通过VC2005编译出的不带预编译头的Win32控制台应用程序,也就是用空环境,这样编译出来的可执行文件也不是放在哪台机子都能跑的。
下面讲讲如何设置快捷键。
点击菜单中的“工具->自定义”,
点击右下角的 “键盘”,
点击 “按快捷键” 下面的文本框,
按下 Shift + Ctrl + F7, 如果这个快捷键已经分配给了其他的命令,更换一个即可。
在“显示命令包含” 中填入“工具.外部命令6“, 再点击 “分配” 按钮.
点”确定“,再点“关闭”.
这样就给 GNU C++ Compiler 分配了快捷键 Shift + Ctrl + F7
注意刚才是在GNU C++ Compiler 位于 外部工具菜单的第6项的情况下,在”显示命令包含“ 中填入“工具.外部命令6”!
同理,我们可以给 Run as C++ Application 分配一个快捷键。
再讲讲如何分配一个工具条。
点击菜单中的“工具->自定义”, 点击 “工具栏” 选项卡.
篇5:gcc编译器对待函数声明与TurboC的区别Unix系统
无意中发现,gcc的函数调用可以在没有在main()函数之前声明就可以使用, main() { func1(); } func1() func2() 像这种函数调用是可以在gcc下编译通过的,也就是说,不声明就可以使用。各个函数放在文件里,main.c中不放它们的声明结果也是可以通过的 ------
无意中发现,gclearcase/“ target=”_blank\" >cc的函数调用可以在没有在main()函数之前声明就可以使用。main()
{
func1();
}
func1()
func2()
像这种函数调用是可以在gcc下编译通过的,也就是说,不声明就可以使用,
各个函数放在文件里,main.c中不放它们的声明结果也是可以通过的 ------还有几个问题没弄明白:05.09.06
同一个文件中可以包含几个函数,这几个函数上方可以定义全局变量,但是一个可执行文件的其他函数要使用此全局变量必须先做extern的声明才能使用,为什么?
他们在内存中,编译时是怎么安排的?
2。头文件内函数声明的顺序与他们的相互调用关系应该没有什么关系,那么,编译连接以及执行时,函数调用过程是怎样的?全局变量,extern变量是怎么安排的。
原文转自:www.ltesting.net