程序员面试宝典之 C和C++的关系

1.      在C++程序中调用C编译器编译后的函数,为什么要加上 extern “C”

       答案: C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x,inty).该函数被C编译器编译后在库中的名字为 _foo, 而C++编译器则会产生像 _foo_int_int之类的名字。

       C++提供了C连接交换指定符 extern “C” 解决名字匹配的问题

2.      头文件中的 ifndef/define/endif是干什么用的?

       答案: 防止该头文件被重复的引用

3.#include <filename.h> 和 #include “filename.h”有什么区别

       答案: 对于<filename.h>,编译器从标准路径搜索filename.h

                而对于“filename.h”,编译器从用户的工作路径开始搜索filename.h

4.如何判断一段程序时候C编译程序还是C++编译程序编译的?

       答案: C++编译是定义了 _cplusplus  在VS2008中,C/C++的高级选项中可以定义编译         为C++还是C。

              C编译是定义了 _STDC

程序设计的其他问题:

main 主函数执行完毕之后,是否可能会在执行一段代码? 给出说明。

答案: 如果需要加入一段在main退出后执行的代码,可以使用atexit()函数注册一个函数,代码如下:

#include <stdlib.h>

int atexit(void (*function)(void));

#include <stdlib.h>

#include <stdio.h>

void fn1(void),fn2(void),fn3(void),fn4(void);

int main()

{

       atexit(fn1);

       atexit(fn2);

       atexit(fn3);

       atexit(fn4);

       printf(“Thisis executed first.\n”);

}

void fn1()

{printf(“next.\n”);}

void fn2()

{printf(“executed ”);}

void fn3()

{printf(“is ”);}

void fn4()

{printf(“This ”);}

结果为:

 Thisis executed first.

 Thisis executed next.


你可能感兴趣的:(程序员面试宝典之 C和C++的关系)