之所以大多数程序的“入口”是 main,是因为连接器缺省会连接一个叫 crt0.o 或者 crt0.lib 之类的库,这个库才是一个程序真正的入口,这个真正的入口作了一段初始化之后将控制权交给 main。大多数情况下用户程序不会自己初始化这些东西,所以缺省连接这个库。
如果你自己完成这部分初始化,完全可以抛弃 main。
main 不是程序的入口,只不过是一个普通的符号而已。
以前有个帖子是关于如何让valgrind支持线程
隐约记得里头用到了一个gcc特有的宏
该宏可以使一个函数在main之前就执行
#include <stdio.h>
#include <string.h>
void foo() __attribute__ ((constructor));
int main()
{
return 0;
}
void foo()
{
printf("Hello from %s\n", __FUNCTION__);
}
C++修改入口函数名Main的方法
方法1
// 通过下面这句话将入口函数改成fn.
#pragma comment(linker, "/entry:fn")
#include <iostream>
int fn(void)
{
std::cout << "Hello world!" << std::endl;
return 0;
}
方法2:
项目"属性页"-->"配置属性"-->"链接器"-->"高级"-->"入口点"
加入你想要的入口函数名.
如果你自己完成这部分初始化,完全可以抛弃 main。
main 不是程序的入口,只不过是一个普通的符号而已。
以前有个帖子是关于如何让valgrind支持线程
隐约记得里头用到了一个gcc特有的宏
该宏可以使一个函数在main之前就执行
#include <stdio.h>
#include <string.h>
void foo() __attribute__ ((constructor));
int main()
{
return 0;
}
void foo()
{
printf("Hello from %s\n", __FUNCTION__);
}
C++修改入口函数名Main的方法
方法1
// 通过下面这句话将入口函数改成fn.
#pragma comment(linker, "/entry:fn")
#include <iostream>
int fn(void)
{
std::cout << "Hello world!" << std::endl;
return 0;
}
方法2:
项目"属性页"-->"配置属性"-->"链接器"-->"高级"-->"入口点"
加入你想要的入口函数名.