Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2350316
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:07:24

命令行参数分析

我们在实验中使用的 Code::Blocks 只是一种集成开发环境(IDE), 它本身要依赖 gcc 编译器才能对编写的 C 语言程序进行 预处理 (preprocess)、编译 (compile) 和 链接 (link). 还要依赖 gdb 调试器才能对编译好的可执行程序进行调试 (debug).

事实上, 在程序写好之后, 我们完全可以脱离 Code::Blocks 的束缚, 直接同 gcc 打交道来让程序工作. 例如, 有如下 C 程序 (hello.c):

#include int main(void){    printf("Hello World!\n");    return 0;}则可以用下面的命令来从 hello.c 源文件得到 hello.exe 可执行程序. 这一过程中 gcc 同时起到预处理器、编译器和链接器的功能.

$ gcc -o hello.exe hello.c我们也可以仅对一个源程序做预处理 (对 hello.c 做预处理, 结果存为 expanded.c) 此时 gcc 只起预处理器的作用:

$ gcc -E -o expanded.c hello.c或者仅对一个源程序做编译 (对 hello.c 做预处理和编译, 生成目标文件 hello.o) , 此时 gcc 起预处理器和编译器的作用:

$ gcc -c -o hello.o hello.c从 .c 文件生成可执行程序时, gcc 还允许我们不指定输出文件的名字, 例如:

$ gcc hello.c 这条命令相当于 gcc -o a.exe hello.c

最后 gcc 还提供了一个帮助功能, 显示所有支持的参数

$ gcc --help在这次上机作业中, 我们编写程序来分析拟传递给 gcc 的命令行参数, 判定其将会执行的功能.

输入
一般地, 一个 (在本问题的上下文中经过充分简化后的) 完整的 gcc 命令行, 可能呈现为以下两种形式:

  gcc [options]   gcc --help第一种形式中, options 的内容可以是下表中的任意一个和若干个的组合(保证同一种 option 不会重复出现):

命令行参数的形式 含义
-std= 执行的 C 语言规范 ( 可能是 c89 或者 c99), 本参数可以省略, 默认为 c89
-E 仅执行预处理
-c 仅执行预处理和编译
-o 指定输出文件名, 如果当前任务是生成可执行程序, 则本参数可以省略(此时 默认为 'a.exe' 其它情况下没有默认输出文件名)


命令中所有涉及到的文件名都保证仅含小写字母、数字、下划线 ('_') 和英文句号 ('.'), 文件名长度不超过 100 字符.

gcc 命令的不同 options 之间, 以及 -o 参数的 -o 和文件名之间, 都保证有至少一个空格. -std= 参数和C语言标准之间没有空格

输入数据中的每个 gcc 命令都保证合法, 其长度不超过 1000 字符. EOF标志输入结束.


输出
对于输入的每个 gcc 命令行, 输出对其功能的判定. 后跟一换行符 (参见输出样例). 每行的长度不会超过1000字符.


输入样例
gcc hello.cgcc -c -o hello.o hello.cgcc -std=c99 -o foobar.c -E hello.cgcc --help输出样例
I am a c89 preprocessor + compiler + linker. I start from "hello.c" and end with "a.exe".I am a c89 preprocessor + compiler. I start from "hello.c" and end with "hello.o".I am a c99 preprocessor. I start from "hello.c" and end with "foobar.c".I am showing help.
--------------------------------------------------------------------------------
注1:以上对gcc的描述是真实的。你可以在命令行试验一下。在“开始”菜单中运行“命令提示符”,黑窗口中输入“set path=%PATH%;C:\MinGW\bin”,然后便可以使用gcc命令。红字部分请根据机器编译器的安装目录适当调整。
注2:本次作业试行“人性化自动评判”,根据输出错误的行数自动给分。教师手工评判只处理风格分和不用函数、使用goto、使用全局变量的扣分。
注3:这里介绍的库函数可以给你带来很多帮助。

--------------------next---------------------

阅读(1140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~