面试问题:C语言用十种方法实现hello world程序,怎么做?
# include & ltstdio.h & gt
# include & ltiostream & gt
int main(){
printf("Hello world!");//如何编写教材
puts("Hello world!");//我的最爱
puts("你好" "世界!");//拼接字符串
STD::cout & lt;& lt“你好世界!”& lt& ltSTD::endl;// C++风格的教材编写
返回0;}
2.“你好世界!”用宏写的。
“#”可以“提取”参数的名称,并将其转换为字符串。
# include & ltstdio.h & gt
定义看跌期权
int main(){
回说(你好世界!);
}
3.“你好世界!”脱离上下文
# include & ltstdio.h & gt
int main(){
回放(“不要说:你好,世界!”[12]);
}
4.“你好世界!”退出时运行。
Atexit()注册回调函数。这个函数可以多次调用,最后注册的函数先执行。
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
void say(){printf("world!");}
void sth(){ printf(" Hello ");}
int main(){
return atexit(say),at exit(sth);
}
5.读你自己的“Hello world!”
// Hello world!
# include & ltiostream & gt
# include & ltfstream & gt
# include & lt字符串& gt
int main(){
STD::if stream ifs(_ _ FILE _ _);
std::string say,some,word
ifs & gt& gt说& gt& gt一些& gt& gtword
STD::cout & lt;& lt一些& lt& lt" " " & lt& ltword
返回0;
}
6.“你好世界!”
声明一个全局类的实例,这个类的构造函数会在主函数执行前被调用,析构函数会在完成后被调用。
# include & ltiostream & gt
班级说{
public:say(){ STD::cout & lt;& lt《地狱》;}
~ say(){ STD::cout & lt;& lt“世界!”;}
}你好;
int main(){
STD::cout & lt;& lt“o”;
返回0;
}
7.传入模板的“Hello world!”
# include & ltiostream & gt
模板& ltchar * words & gt
班级说{
公共:
void运算符()(){ STD::cout & lt;& lt词;}
};
char hello[] = "Hello world!";
int main(){
返回say & lt你好& gt()(), 0;
}
8.叫“你好世界!”私人功能。
# include & ltiostream & gt
# include & ltcstddef & gt
类别机密{
私人:
虚拟void say(){ STD::cout & lt;& lt“你好世界!”;}
};
int main(){
密语;
(reinterpret _ cast & ltvoid(*)()& gt;(* * *(intptr _ t * *)(& amp;word)))();
返回0;
}
9.直接修改函数的返回地址。
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltstddef.h & gt
void say(){
puts("Hello world!");
退出(0);
}
int main()
{
volatile int ptr _ t a = 0;
volatile intptr _ t * p = & ampa;
*(p+2)=(int ptr _ t)say;
*(p+3)=(int ptr _ t)say;
返回0;
}
10.外星人说“你好,世界!”
# include & ltstdio.h & gt
void alien_say (char * p){
while(putchar(*(p+= *(p+1)-* p)));
}
int main(){
return alien_say ("BETHO!Altec oh liryom(一个loadjudas!)dowd。”), 0;
}