C语言中如何在main函数开始前执行函数

在gcc中,可以使用attribute关键字,声明constructor和destructor,代码如下:

[cpp] view
plain
copy

  1. #include <stdio.h>  
  2.   
  3. __attribute((constructor)) void before_main()  
  4. {  
  5.     printf("%s/n",__FUNCTION__);  
  6. }  
  7.   
  8. __attribute((destructor)) void after_main()  
  9. {  
  10.     printf("%s/n",__FUNCTION__);  
  11. }  
  12.   
  13. int main( int argc, char ** argv )  
  14. {  
  15.     printf("%s/n",__FUNCTION__);  
  16.     return 0;  
  17. }  

 

  vc不支持attribute关键字,在vc中,可以使用如下方法:

[cpp] view
plain
copy

  1. #include <stdio.h>  
  2.   
  3. int  
  4. main( int argc, char ** argv )  
  5. {  
  6.         printf("%s/n",__FUNCTION__);  
  7.   
  8.         return 0;  
  9. }  
  10.   
  11.   
  12. int before_main()  
  13. {  
  14.         printf("%s/n",__FUNCTION__);  
  15.   
  16.         return 0;  
  17. }  
  18.   
  19. int after_main()  
  20. {  
  21.         printf("%s/n",__FUNCTION__);  
  22.   
  23.         return 0;  
  24. }  
  25.   
  26. typedef int func();  
  27.   
  28. #pragma data_seg(".CRT$XIU")  
  29. static func * before[] = { before_main };  
  30.   
  31. #pragma data_seg(".CRT$XPU")  
  32. static func * after[] = { after_main };  
  33.   
  34. #pragma data_seg()  

 

  编译执行,上述两段代码的结果均为:

  before_main

  main

  after_main

 

  可以在main前后调用多个函数,在gcc下使用attribute声明多个constructor、destructor,vc下在before、after数组中添加多个函数指针。

时间: 2024-12-04 01:01:01

C语言中如何在main函数开始前执行函数的相关文章

C语言中怎么在main函数开始前执行函数_C 语言

在gcc中,可以使用attribute关键字,声明constructor和destructor,代码如下: 复制代码 代码如下: #include <stdio.h> __attribute((constructor)) void before_main(){ printf("%s/n",__FUNCTION__);} __attribute((destructor)) void after_main(){ printf("%s/n",__FUNCTIO

c++-C++根据代码行号或者函数名选择执行函数

问题描述 C++根据代码行号或者函数名选择执行函数 C++根据代码行号或者函数名选择执行函数,输入函数名自动循环执行指定的函数,咨询具体的实现方法 解决方案 你需要一个函数地址和函数名的对照数组,然后在程序运行的时候根据你的函数名查找对应的函数执行,然后就可以执行了. 解决方案二: 日志中自动记录所在函数名.文件名.行号c语言输出文件名函数名和行号python 获取当前函数名和行号 解决方案三: 可以参考qt的元对象 实现方式 解决方案四: 动态库吗?导出成c的动态库,然后采用loadlibra

浅析Javascript匿名函数与自执行函数_javascript技巧

函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 函数的定义,大致可分为三种方式: 第一种:这也是最常规的一种 function double(x){ return 2 * x; } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. var double = new Function('x', 'return 2 * x;'); 第三种: var double = function(

如何在c语言中控制时间啊,

问题描述 如何在c语言中控制时间啊, 例如,在运行时需要输入,如果过了时间,就不允许输入,该怎么弄,求大神帮忙 解决方案 这个问题可以用双线程也可以用双进程. 假设用双进程, 父进程计时间,到时间了就向子进程发送信号. 子进程收到进程不管scanf(当然或者其他输入数据的函数也可)是否收到数据 子进程一律终止. 事例代码如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <

c语言中怎么把一个大小不确定的二维数组当作参数传入函数中

问题描述 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神 解决方案 用VC++新建一个程序,默认生成的main函数定义如下 int mian(int argc, char* args[]) 这就是一个例子. 解决方案二: 一个表示长度的参数,一个指向二维数组的指针 解决方案三: fun(args[][],int rows,int cols) 解决方案四: void Func(int array[][10]

Keil4中无法再main函数中设置断点

问题描述 Keil4中无法再main函数中设置断点 在汇编那可以设置断点,但是在c语言那个图标就编程灰色的了 解决方案 先退出调试模式试试? 解决方案二: debug 里面选择run to main() 再rebuild下

让你提前认识软件开发(18):C语言中常用的文件操作函数总结及使用方法演示代码

第1部分 重新认识C语言 C语言中常用的文件操作函数总结及使用方法演示代码           在C语言中,有关文件操作的函数多达数十种,但并非每个函数都经常会被用到.        本文对实际软件开发项目中常用的C文件操作函数的用法进行了总结,并用实际的C代码来演示了它们的用法.   1. C语言中常用的文件操作函数总结 (1) fopen 作用:打开文件. 表头文件:#include <stdio.h> 定义函数:FILE *fopen(const char *path, const ch

c语言-如何在C语言中以数组指针作为形参输出数组

问题描述 如何在C语言中以数组指针作为形参输出数组 #include ""stdafx.h""void cmdsend(unsigned int * info);int main(){ unsigned int senddata[5]; senddata[0] = 8; senddata[1] = 2; senddata[2] = 0; senddata[3] = 4; senddata[4] = 5; cmdsend( senddata ); while(1){;

c语言-C语言中函数调用出错问题的解决方法,主函数中的函数参数问题

问题描述 C语言中函数调用出错问题的解决方法,主函数中的函数参数问题 最后的主函数中的Locatei(&Q)一直提示参数不够,但我添加了指向pos的整型变量并赋值给i后仍不能成功,我现在不知道是调用错了还是那里的问题,求解答啊! include include include #define ERROR 0 #define OK 1 #define RL 200 typedef struct{ char *name[RL]; char *phonenum[RL]; char *add[RL];