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.