C语言中总是从main函数开始执行函数吗?
答案是否定的!
在gcc中,可以使用attribute关键字,声明constructor和destructor,代码如下:
[cpp] view plaincopy
#include <stdio.h>
__attribute((constructor)) void before_main()
{
printf("%s/n",__FUNCTION__);
}
__attribute((destructor)) void after_main()
{
printf("%s/n",__FUNCTION__);
}
int main( int argc, char ** argv )
{
printf("%s/n",__FUNCTION__);
return 0;
}
vc不支持attribute关键字,在vc中,可以使用如下方法:
[cpp] view plaincopy
#include <stdio.h>
int main( int argc, char ** argv )
{
printf("%s/n",__FUNCTION__);
return 0;
}
int before_main()
{
printf("%s/n",__FUNCTION__);
return 0;
}
int after_main()
{
printf("%s/n",__FUNCTION__);
return 0;
}
typedef int func();
#pragma data_seg(".CRT$XIU")
static func * before[] = { before_main };
#pragma data_seg(".CRT$XPU")
static func * after[] = { after_main };
#pragma data_seg()
编译执行,上述两段代码的结果均为:
before_main
main
after_main
可以在main前后调用多个函数,在gcc下使用attribute声明多个constructor、destructor,vc下在before、after数组中添加多个函数指针。
C语言中总是从main函数开始执行函数吗?相关推荐
- 关于linuxC语言中创建进程,利用execlp函数执行.c程序问题
关于linuxC语言中创建进程,利用execlp函数执行.c程序问题 对于一个小白来说,这个系统调用真的太难了,完全摸不着头脑啊,一搜execlp函数,全是执行的命令,什么传参硬是没懂. 不过说到底, ...
- c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用
详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...
- 在C语言中以编程的方式获取函数名
在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...
- c语言中总是从main函数开始,C语言总是从main函数开始执行吗
//-------------------------------------------------------- 本文目录结构 |-提出问题 |-解决问题 |-推荐文章 |-作业 //------ ...
- main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?
main函数在C语言中是怎么定义的?有什么作用? 更新时间:2019-10-24 13:55 最满意答案 额,main不是程序的最开始啦.拿用glibc的程序来说,C语言执行的过程应该是 _start ...
- c语言中用于获取字符串长度的函数是,C语言中求字符串长度的函数的几种实现方法...
C语言中求字符串长度的函数的几种实现方法 1.最常用的方法是创建一个计数器,判断是否遇到'\0',不是'\0'指针就往后加一. int my_strlen(const char *str) { ass ...
- C语言中常见的四个内存函数
前言 我们为什么要用内存操作函数? 内存函数,是通过访问地址的方式操作对象,因此可应用于任何类型对象,只要按照字节操作 1. memcpy void * memcpy ( void * destina ...
- c语言中结构体类型定义的函数指针,结构体中定义函数指针
结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...
- C语言中随机数的生成(rand函数和srand函数)
CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众乐 ...
- c语言中函数static变量,[转]C语言中的 static变量、static函数
1. static 变量 静态变量的类型 说明符是 static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量. 例如外部变量虽属于静态 存储方式,但不一定是静态变量, ...
最新文章
- SpringMVC的文件上传和拦截器
- Akka的Hello World(一)Akka的Actor架构
- Attempt to execute SCRIPT plot as a function?
- threadgroup_Java ThreadGroup toString()方法与示例
- 程序员的算法课(13)-分治法
- 滇西应用技术大学有没有计算机专业,学校介绍
- Java下载安装及环境配置
- 如何利用迅捷PDF编辑器在PDF文档上修改文字大小和颜色
- linux u盘读取速度,linux dd命令测试U盘读写速度
- can和could的用法_can和could的区别和用法
- 【ESP8266+STM32】获取B站粉丝数,并在STM32屏上显示出来(物联网小项目)
- 精通 Windows Server 2008 R2
- 计算机垃圾桶桌面,电脑桌面比垃圾桶还乱?一分钟轻松快速整理你的电脑桌面...
- Error creating bean with name 'redisTemplate' defined in URL
- java线程状态研究
- 项目管理:PMP、IPMP、CPMP之间区别
- 吉林建筑大学计算机科学技术,吉林建筑大学计算机科学与技术专业2015年在吉林理科高考录取最低分数线...
- Bigo的Java面试,我挂在了第三轮技术面上.........
- 对于一些常用的R语言的算法包的归纳(修改)
- 华为手机关闭蓝牙开发搜索_大众速腾手机无法搜索车载蓝牙系统维修实例
热门文章
- 适合0基础的web开发系列教程-canvas
- 今日SGU 5.20
- 为linux服务器安装rkhunter工具
- 《中国人工智能学会通讯》——11.64 基于成对约束的属性特征选择
- 随办——真正懂企业痛点的移动协作软件
- 自然语言处理与中文分词的难点总结--学习笔记
- OpenSolaris安装JDK以及配置java开发环境
- HP5200打印机从控制面板手动配置TCP/IP 参数
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载...
- 小米正式开源 Istio 管理面板 Naftis