亮书房程序员首页投稿(暂停使用,暂停投稿)

新说`HelloWorld`

2016-07-25  本文已影响0人  德阳凯子哥

基本上每门语言都是用"helloworld"作为她的第一讲,C语言也不例外。

传统HelloWorld


传统的教材都是让你安装一种IDE集成环境,然后照例子敲入代码,按下ctrl+r之类的运行程序,感受一下运行的结果。HelloWorld程序如下:

#include <stdlib.h>
#include <stdio.h>

void main() {
        printf("Hello World\n");
}
Paste_Image.png

老生常谈


Paste_Image.png

然后是运行:

Paste_Image.png

可以执行环境就是开启一个终端程序,然后./a.out运行。

守则一:一个负责的程序员编写程序要考虑可移植性

int main(int argc, const char *argv[]) { ... }

其中的形式参数的作用就是接收运行时传入的命令参数,后面我们会讨论到。

换着花样玩


使用全局复用

全局变量基本是没种语言都支持的,即为全局,即是对所有人可见

extern char g_SayHello[];
  1. 再任何一个.c文件都可以,但是推荐还是utils.c中,这个就是规范,下次,接手项目的人要修改哪个文件.h有类似上面的外部引用,自然而然的就在对应的.c中寻找其定义了:
char g_SayHello[] = "Kick the bucket!";
  1. 修改helloworld.c,其实这个名字不合适,最好加一个前缀,表面她含有入口函数,main_helloworld.c:
...
#include "utils.h"
...
int main(int argc, const char *argv[]) {
        printf("%s\n", g_SayHello);
        return EXIT_SUCCESS;
}
  1. 加入新的源文件一起编译、运行如下:
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c
[zhoukai@zhoukai-MBPR:tmp]$ ./a.out
Kick the bucket!
[zhoukai@zhoukai-MBPR:tmp]$

使用宏复用

宏是c语言强有力的特性之一,不使用宏,你会做很多不讨喜的工作,但是滥用宏也会不讨喜,所有任何东西都有利有弊。就像没有坏人,就体现不出好人;没有细菌这样的微生物,满世界都是尸体一样。这个是一个哲学问题〜〜〜

//稍作解释,下面的宏定义是关联预编译条件宏使用,即如果没有定义宏,则定一个默认的宏
#ifndef SAY_HELLO
#define SAY_HELLO "Kick the bucket!"
#endif
  1. 修改main_helloworld.c:
int main(int argc, const char *argv[]) {
        printf("%s\n", SAY_HELLO);
        return EXIT_SUCCESS;
}
  1. 编译不同的行为的程序:
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Drop\ dead\!\" -o a.out
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Go\ to\ hell\!\" -o ab.out
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Damn\ you\!\" -o abc.out
[zhoukai@zhoukai-MBPR:tmp]$ ./a.out
Drop dead!
[zhoukai@zhoukai-MBPR:tmp]$ ./ab.out
Go to hell!
[zhoukai@zhoukai-MBPR:tmp]$ ./abc.out
Damn you!
[zhoukai@zhoukai-MBPR:tmp]$

稍作解释,gcc最简单的使用就是gcc <源文件名>,然后就会生成默认的程序文件a.out,但是一般都希望又一个自定义的程序文件名,所以加上选项参数-o <目标名>;在不加-c <源文件名>的情况下都是直接完成三部曲,生成可执行文件的;其它还有很多可选的参数,后面慢慢说。

结束语


为什么要写这么多,其实也不是高深的代码。目的就是一个,你在编写代码的时候是否比别人多想了一步呢?是否考虑过代码的可移植性呢?是否考虑过代码的可复用性呢?是否考虑过代码的可维护性呢?这些!都是一名合格的程序员应该考虑的问题。

上一篇 下一篇

猜你喜欢

热点阅读