“Hello World!”的N种写法

2008-02-23 05:37:30来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在初学一门编程语言的时候,写一个“Hello world!”程式是最常见的入门方法。通过写一个成功的“Hello world!”,能够实践这门语言最基本的语法特性,还能够带给自己成就感,真是一举两得。C/C 语言本身有很多特性,假如能够将这些技术分解出来变成一个个的“Hello world!”,并且将这些技术点到为止,貌似也算是一件善事。这里,列举了10个“Hello world!”程式,大家雅俗共赏一下。

1. 最经典的“Hello world!”

“Hello world!”最经典的写法当然是直接用 printf 输出“Hello world!”这几个字符了。无论用C还是 C ,写起来都很的简洁明了。这里把最常见的几个全部列在下面。

#include <stdio.h>
#include <iostream>
int main()
{
printf("Hello world!"); // 教科书的写法
puts("Hello world!"); // 我最喜欢的
puts("Hello" " " "world!"); // 拼接字符串
std::cout << "Hello world!" << std::endl; // C 风格的教科书写法
return 0;
}
特别需要注意的是,在C/C 里,假如两个字符串之间除空白符以外没有任何东西,编译器会自动认为这两个字符串是连在一起的字符串。这样,假如一个字符串过长,能够用这种方法换行来写,既不浪费性能,又美观。

2. 用宏写的“Hello world!”

在C/C 里,宏是个神奇的东西。特别是在C语言中,宏能够帮我们做一些“又脏又累”的活,包括拼接代码片断、隐藏繁琐的实现细节等等。其中特别有趣的是“#”的用法,他能够“提取”参数的名字,把他变成字符串。
#include <stdio.h>
#define Say(sth) puts(#sth)
int main()
{
return Say(Hello world!);
}
请注意,这个Hello world可是完全没有出现引号哦!

3. 断章取义的“Hello world!”

字符串是一种常量这当然毫无疑问,但是他的类型是什么,这就需要考虑一下了。使用C 的typeid就能够这个问题的答案,而且只要是符合C或C 标准的编译器就应该是相同的结果。比如字符串“Hello world!”,他的类型就是 char const [13]。
知道了这个,就能够写出以下的“Hello world!”:
#include <stdio.h>
int main()
{
return puts(&"Do not say: Hello world!"[12]);
}

4. 退出时运行的“Hello world!”

大家都知道 main 函数退出意味着程式结束,可是这并不完全正确,我们完万能够在 main 函数退出以后做很多事呢——比如说,输出“Hello world!”。这个功能依赖于C标准库中提供的函数 atexit(),调用这个函数并注册自己的回调函数就行。需要注意,这个函数能够调用多次,最后注册的函数最先执行。
// 本文转自 C Builder 研究 - http://www.ccrun.com/article.asp?i=999&d=v433i2
#include <stdio.h>
#include <stdlib.h>
void say()
{
printf("world!");
}
void sth()
{
printf("Hello ");
}
int main()
{
return atexit(say), atexit(sth);
}

5. 读取自己的“Hello world!”

C/C 的编译器提供了一些有用的内置宏,最常用的就是 __FILE__ 和 __LINE__ 了。其中,__FILE__ 代表当前的源文档的文档名,嗯,对了,假如我们让这个程式读取自己的源文档,不就能够做一个很有意思的“Hello world!”了么?
// Hello world!
#include <iostream>
#include <fstream>
#include <string>

int main()
{
std::ifstream ifs(__FILE__);
std::string say, some, word;
ifs >> say >> some >> word;
std::cout << some << " " << word;
return 0;
}

6. 话分两头的“Hello world!”

有了C 的类,我们就能够光明正大的在 main 函数执行之前和之后做感兴趣的事情了。我们能够声明一个全局的类的实例,这样,在 main 函数执行之前会调用这个类的构造函数,结束之后则会调用析构函数。
#include <iostream>
class say
{
public:
say()
{
std::cout <<

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 如何用TComboBox模拟TColorBox

下一篇: C程式研发经典实例之6