吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C语言如何在没有 main() 的情况下编写正在运行的 C 代码

C语言如何在没有 main() 的情况下编写正在运行的 C 代码

来源:网络 | 更新时间:2022-01-30 14:39:44
编写一个打印52cxydh的 C 语言代码,无需任何main()函数。 从逻辑上讲,如果不使用 main() 函数,编写 C 程序似乎是不可能的。因为每个程序都必须有一个 main() 函数,因为:-
  • 它是每个 C/C++ 程序的入口点。
  • 所有预定义和用户定义的函数都通过 main 直接或间接调用。
因此,我们将使用带有参数的预处理器(一个在编译前处理源代码的程序)指令#define 来给人一种程序在没有主程序的情况下运行的印象。但实际上它以隐藏的主要功能运行。让我们看看预处理器是如何工作的:- 因此,可以通过以下方式解决:-
  • 使用定义 main 的宏
#include<stdio.h>
#define fun main
int fun(void)
{
printf("52cxydh");
return 0;
}
输出: 52cxydh
  • 使用 Token-Pasing Operator 上面的解决方案中包含单词“main”。如果我们连main都不能写,我们可以使用token-pasing操作符
#include<stdio.h>
#define fun m##a##i##n
int fun()
{
printf("52cxydh");
return 0;
}
输出: 52cxydh
  • 使用参数宏
#include<stdio.h>
#define begin(m,a,i,n) m##a##i##n
#define start begin(m,a,i,n)

void start() {
printf("52cxydh");
}
输出: 52cxydh
  • 编译时修改入口点
#include<stdio.h>
#include<stdlib.h>

// entry point function
int nomain(); 

void _start(){

// calling entry point
nomain(); 
exit(0);
}

int nomain()
{
puts("52cxydh");
return 0;
}
输出:  
52cxydh
使用命令编译: gcc filename.c -nostartfiles (nostartfiles 选项告诉编译器避免标准链接) 说明: 在正常编译下,_start() 的主体将包含对 main() 的函数调用 [此 _start() 将在正常编译期间附加到每个代码],因此如果该 main() 定义不存在,它将导致类似“在函数`_start'中的错误:(.text + 0x20):未定义对`main'的引用。 在上面的代码中我们所做的是定义了我们自己的_start()并定义了我们自己的入口点,即nomain()

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com