6个变态的C语言Hello World程序

yizhihongxing

当我们学习一门新的编程语言时,最基础的就是编写一个简单的“Hello World”程序。而C语言的“Hello World”程序在使用中可能会涉及到一些变态的写法,下面就来介绍一下六个变态的C语言“Hello World”程序和详细的编写攻略。

1. hello.c中没有main函数

这个程序的奇妙之处在于,它根本没有main函数,却可以输出“Hello, world!”。这是因为在头文件中定义了一个宏,即把main函数改成一个下划线“_”开头的函数,然后在代码中调用这个函数就可以输出了。

#include <stdio.h>
#define main _start

void _start()
{
    printf("Hello, world!\n");
}

2. helloworld.c中有两个main函数

这个程序中有两个同名的main函数,是不是很奇妙?但它同样可以输出“Hello, world!”,这是因为只有一个main函数是程序的入口,而另一个main函数只是一个普通的函数而已。

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
}

int main(int argc, char **argv)
{
    printf("Hello, world!\n");
}

3. helloworld.c只有一个字符

这个程序只有一个字符,也就是一个字符的字符串,但它同样可以输出“Hello, world!”,这是因为编译器会自动将它作为字符串处理并输出。

main(){puts("Hello, world!");}

4. helloworld.c中的main函数递归调用自身

这个程序中的main函数是递归调用自身的,会一直输出“Hello, world!”直到栈溢出,程序异常退出。

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    main();
}

5. 能够输出JavaScript代码的helloworld.c

这个程序的奇妙之处在于,它可以输出JavaScript代码,但最终输出的还是“Hello, world!”。通过在程序开头定义一个JavaScript函数,再输出该函数的调用,就可以实现这个功能。

#include <stdio.h>

char* js = "function hello() { document.write('Hello, world!'); }";

int main()
{
    printf("<script>%s hello();</script>\n", js);
}

6. 使用cow和devil ASCII图案输出hello world的helloworld.c

这个程序使用ASCII码的cow和devil图形输出“Hello World!”,奇妙之处在于它使用了cowsay和devilspie两个程序来实现。

#include <stdio.h>

int main()
{
    system("cowsay -f $(ls /usr/share/cowsay/cows/ | shuf -n1) \"Hello World!\" | pv -qL 10");
    system("devilspie gimp -i --no-new-windows --run '(gimp-quit 0)'");
}

以上就是六个变态的C语言“Hello World”程序的详细攻略,其中指出了每个程序独特的特点和编写的方法,希望能够对初学者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:6个变态的C语言Hello World程序 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • WPA/WPA2无线网络密码破解图文教程

    下面是“WPA/WPA2无线网络密码破解图文教程”的完整攻略,包括两个示例说明。 WPA/WPA2无线网络密码破解图文教程 背景介绍 WPA/WPA2是目前使用最为广泛的无线网络加密方式之一。但是,在某些情况下(比如忘记密码),我们需要破解已经连接的无线网络密码。本文将介绍WPA/WPA2无线网络密码破解的方法。 破解方法 准备工作 首先,我们需要安装一个L…

    C 2023年5月22日
    00
  • JSON数据转换成Java对象的方法

    将JSON数据转换成Java对象是Java开发中常见的操作。下面我将讲解三种将JSON数据转换成Java对象的方法。 方法一:手动解析JSON数据 手动解析JSON数据是最原始的方法。大概思路就是按照JSON数据的层次结构逐级解析JSON数据,并将其存储到Java对象中。 一般情况下,我们会使用JSON解析工具库来将JSON数据解析成Java对象。常用的JS…

    C 2023年5月23日
    00
  • C语言 文件的打开与关闭详解及示例代码

    下面我将详细讲解“C语言 文件的打开与关闭详解及示例代码”的完整攻略。 一、文件的打开 文件的打开可以使用stdio.h库中提供的fopen函数实现。fopen函数的原型如下: FILE* fopen(const char* filename, const char* mode); 其中filename是文件名,mode是打开的模式,它们都是以字符串形式传递…

    C 2023年5月24日
    00
  • PHP设计模式概论【概念、分类、原则等】

    PHP设计模式概论 概念 设计模式是指在面向对象编程中用于解决特定问题的重复使用的经验总结。设计模式不是一个可直接转换成代码的解决方案,而是定义了一组通用的原则和规范,它们可以用于设计任何系统。 分类 设计模式可以分为三类:创建型、结构型和行为型。 创建型模式 创建型模式主要用于对象的创建,包括“工厂模式”、“抽象工厂模式”、“单例模式”、“原型模式”、“建…

    C 2023年5月22日
    00
  • C++快速幂与大数取模算法示例

    C++快速幂与大数取模算法示例 本文主要介绍C++中实现快速幂算法和大数取模算法的示例以及相关代码。快速幂算法可以很好地解决指数较大的幂运算问题,大数取模算法则可以在计算过程中避免数值过大而发生的溢出错误。 快速幂算法原理 快速幂算法是指通过对指数进行二进制分解后,根据分解结果按照乘幂的顺序计算幂运算结果。其本质上是一种分治策略,可以大大减少指数较大情况下的…

    C 2023年5月22日
    00
  • android解析JSON数据

    Android解析JSON数据的完整攻略包括以下几个步骤: 1. 引入JSON库 Android提供了许多JSON库,例如GSON和Jackson等等。引入这些库需要在build.gradle文件中添加相应的依赖项,例如在build.gradle (Module:app)文件中添加以下代码: dependencies { // GSON库 implement…

    C 2023年5月23日
    00
  • C中的char s[]和char *s有什么区别

    当我们声明一个字符数组(char array)或一个字符指针(char pointer)时,会用到char s[]和char *s两种写法。它们之间有以下区别: 内存分配方式不同 char s[]声明的是字符数组,也叫数组型字符串(array-style string)。它需要在定义的时候指定初始值,编译器会自动计算数组的大小,将内存分配到栈上,这个数组的大…

    C 2023年5月10日
    00
  • php中json 序列化为 [] 的弊端

    首先,需要明确一下什么是 json序列化。json是一种轻量级的数据交换格式,是一种无状态、轻量级的数据交换格式,同时也容易读写和解析。在PHP中,通过 json_encode() 函数可以将一个PHP变量序列化为一个JSON格式的字符串,通过 json_decode() 函数可以将一个JSON格式的字符串重构为PHP变量。 现在回到问题本身,PHP中使用 …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部