前天面试,突然遇到上面的这个题目,我当时想直接做个全局类就能解决
void before_main() { printf("%s\n",__FUNCTION__); } void after_main() { printf("%s\n",__FUNCTION__); } class Test { public: Test(){ before_main(); } ~Test(){ after_main(); } } Test test; // 全局类变量,在main前调用构造,在main结束后,调用析构函数 int main(int argc,char **argv) { printf("%s\n",__FUNCTION__); return 0; }
上面是用C++实现的,面试官问如果用C,如何实现,谷歌了一下,发现真有解决方案,只是利用了编译器一些特性实现罢了,不知这样面试可有意义.
在GCC中,可以使用attribute关键字,声明constructor和destructor,代码如下:
// 可声明多个constructor,在main前调用多个函数 __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; }
在VC6中,不支持attribute关键字,可使用如下方法(未在vs2010下测试通过,after_main没有执行):
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()
相关推荐
C语言中怎么在main函数开始前执行函数呢?下面小编就大家详细的介绍一下。需要的朋友可以过来参考下,希望对大家有所帮助
运行C程序总是从main函数开始。 2、C语句分为以下5类: (1) 控制语句。 1) if()…else… 条件语句 2) for()… 循环语句 3) while()… 循环语句 4) do…while() 循环语句 5) continue 结束本次循环语句 6) ...
PS:下面通过示例代码看下JAVA中的main函数 package com.han; public class HanTest { public static void main(String[] args){ if(args==null){ throw new NullPointerException(The input is \null\); }...
一个c程序在执行main函数之前和main之后都做了那些事情啊
在写 C++ 的题目的时候经常会遇到这样的问题,写了多个 cpp 文件,在 clion 中编译报错不能同时存在多 main 函数 这里写了一个小程序优雅地解决这个问,非常简单,就是就是读字符串写文件 直接修改一下 CMake 自动...
一般代码只能从main方法开始,main结束后结束 这里给出一种方法,可以在main之前执行代码、在main结束后执行一些代码
电子-在main函数里面先执行初始化SMBusInit以后每次要用直接SMBusReadTemp.zip,单片机/嵌入式STM32-F0/F1/F2
第一章从开机加电到Main函数执行前 《linux内核设计的艺术》的笔记内容 BIOS --创建中断向量和中断描述符表,加载第一扇区代码bootsect bootsect 规划内存,加载第2--5扇区 setup,加载之后的大约240个扇区内核 开始向...
非常不错的参考资料,看过了,现在分享一下
前几天为新员工写一个简单的...特性介绍:如果想定义在main函数之前调用的函数,可以在函数的声明之后加上一句“__attribute__((constructor))”,如下:int before()__attribute__((constructor));如果想定义在main
在开始正题之前,先要来回答这两个问题:所谓的 “main 函数”是指什么?为什么有些编程语言需要强制写一个 main 函数? 某些编程语言以 main 函数作为程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust
FFmpeg For Android (三) 移植main函数到安卓上执行ffmpeg命令 完整源码 执行在安卓上执行ffmpeg命令, 示范了音频剪切和视频格式转换 有了它 你可以做很多有趣的app
在C和Java中,都有一个程序的入口函数或方法,即main函数或main方法。而在JavaScript中,程序是从JS源文件的头部...具体来说,在执行流程进入函数时会建立一个新的作用域,在函数执行完成退出时会销毁这个作用域。函
A)本程序的main函数开始,到main函数结束 B)本程序文件的第-个函数开始,到本程序文件的最后-个函数结束 C)本程序的main函数开始,到本程序文件的最后-个函数结束 D)本程序文件的第-个函数开始,到本程序main函数...
1,DS0(连接在PB5),DS1(连接在PE5) 2,蜂鸣器(连接在PB8) 3,按键KEY0(PE4)/KEY1(PE3)/KEY2(PE2)/KEY_UP(PA0,也称之为WK_UP) 实验现象: 本实验,利用外部中断,实现与实验3类似的效果,即:通过开发板上载有的4个...
最近在使用pandoc这个文档转换软件,能够对各种文档进行完美的转换,比如从markdown文件转为doc,ppt,tex,odt等等各种,感兴趣的可以从Pandoc下载,对于pandoc的的文档转换,都是使用cmd中的命令来进行操作的。...
程序总是从main函数开始执行的。在程序运行过程中,由主函数调用其他函数,其他函数也可以互相调用。在C语言中没有类和对象,在程序模块中直接定义函数。可以认为,一个C程序是由若干个函数组成的,C语言被认为是...
源代码,jar包及bat文件,注意:bat文件中不能有空格。
但是不然,在main函数开始执行前,已经有其他的指令被执行了。 为了程序的顺利执行,首先要初始化执行环境,比如堆分配初始化(malloc, free) ,线程子系统等,这里先提一下:C++ 的全局对象构造函数是在这一...