如何编写一个没有主函数的C程序

From Quora:https://www.quora.com/How-can-I-write-a-C-program-without-a-main-function

Question:我如何才能写一个没有主函数的C程序?

Answer From Travis Hance:

你可以编译任何一个C程序,无论有没有主函数,或者是一个对象文件(.o文件)。只有当你把所有对象文件链接起来,去组成一个可执行文件,你才需要主函数。

如果你想更深入的去了解,你学要知道一些平台特性。

例如在Linux上,一个可执行文件的执行是从_start而不是main。_start函数是在libc里执行的。所以如果你让编译去忽略libc,main就没有执行的基础,然后你就不需要它了。但你必须使用_start作为替代。在这个博客里有一个非常实用的指导:

oracle.com

Hello from a libc-free world! (Part 1)

Answer From Sergey Zubkov:

如果你真的想那么做,编译freestanding(一个独立的编译器不需要有main函数)

$ cat test.c
#include <unistd.h>
#include <string.h>
int szstart()
{
    char* msg = "No main here\n";
    write(1, msg, strlen(msg));
    _exit(0);
}
$ gcc -O3  -ffreestanding -c -o test.o test.c; ld -s -static -o test test.o -e szstart -lc
$ ./test
No main here

Answer From Gurudutt Mallapur:

写一个动态或者静态的C库!

你可以把你可以重复实用的C代码写到库里,并且可以把它链接到任何一个有main函数的程序里。你也需要把它链接到一个测试函数里来保证它正确运行。

在Linux里 .so/.a文件分别对应 动态 静态库

在windows里 .dll/.lib 分别对应动态静态库

时间: 2024-10-13 09:33:51

如何编写一个没有主函数的C程序的相关文章

【C++】编写一个简单的函数实现重载。

//编写一个简单的函数实现重载. #include <iostream> using namespace std; int max(int a,int b) { return a>b?a:b; } int max(int a,int b,int c) { int x=max(a,b); return max(x,c); } double max(double a,double b) { return a>b?a:b; } int main() { cout<<"

编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url

编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ http://www.cyjzs.comwww.greena888.com/ www.800cool.net/ http://hgh-products.my-age.net/ 如下形式叫做目录页: thursdaythree.net/greenhouses--gas-global-green-house-

创建 XMLHttpRequest 对象编写一个标准的函数

function loadXMLDoc(url,callbackfunc){if (window.XMLHttpRequest) {// IE7+, Firefox, Chrome, Opera, Safari 代码 xmlhttp=new XMLHttpRequest(); }else {// IE6, IE5 代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }xmlhttp.onreadystatechange=callback

如何编写一个大写转换函数

问题:使用C语言把字母转换成大写,不能使用库函数. 这个题目可以考查编程的一些基本素养,例如命名与可读性.函数的使用.非预期输入的处理.简单的算法.使用有意义的表达式而不是magic bumber. 关于代码的正确性:我当时犯错的有用了||而不是&&,没有考虑等于a.z的边界条件,输入非字母时应该原样返回,应计算输入与a的差然后在A加上这个差即可. 经过修改,我的代码如下.更完整更优秀的解答见http://zh.lucida.me/blog/from-wuxia-to-programmer

编写一个参数JavaScript函数parseQueryString,它的用途是把url参数解析为一个对象

var url = "http://www.taobao.com/index.php?key0=0&key1=1&key2=2............."; var obj = parseQueryString(url); function parseQueryString(argu){ var str = argu.split('?')[1]; var result = {}; var temp = str.split('&'); for(var i=0; i

开启工程一号:编写一个生成文章序号码的程序2R1D1O201706091I

目的:方便以后生成文章序号码 要求:输入一个短句,根据内容产生序号码 预计: INPUT: c++算法学习 OUTPUT: 2SCA201706101 功能实现: 读入一行,对每个字符进行标记,经过查找对码表生成文件头,日期读取系统时间,总号与分号本地记录. 修改对码表:总号写在最前面. 语言:c++ 生成文件:exe 信息记录:txt文件(可访问) 输出位置:txt文件.屏幕

编写一个网易云音乐爬虫程序

本次借助wxPython编写一个网易云音乐的爬虫程序,能够根据一个歌单链接下载其下的所有音乐 前置说明 网易云音乐提供了一个下载接口:http://music.163.com/song/media/outer/url?id=xxx 所以只需要拿到歌单中每首歌曲对应的 id 即可 1.分析歌单网页元素 打开网易云音乐,复制一个歌单链接 打开chrome,查看网页元素 这里有个细节,我们拿到的歌单url中有一个符号“/#”,因为之前爬虫其他网站时,也是直接请求初始url,一般Elements标签中的

重新认识Java中的主函数各组成部分

主函数各组成部分深入理解 <span style="white-space:pre"> </span>public static void main(String[] agrs) 主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用 主函数的定义: public:代表着该函数访问权限是最大的 static:代表主函数随着类的加载就已经存在了 void:主函数没有具体的返回值 main:不是关键字,但是一个特殊的单词,能够被JVM识别 (String[] a

主函数main

class Person { public static void main(String[] args) { } } 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用 主函数的定义:public:代表着该函数访问权限是最大的static:代表主函数随着类的加载就已经存在了void:主函数没有具体的返回值.main:不是关键字,但是是一个特殊的单词,可以被jvm识别(String[] arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串.字符串类型的数组 主函数是固定格式的