C++面试题集我爱编程

C/C++编译相关

2017-07-23  本文已影响43人  saviochen

1、编译与链接的区别是什么?

在多道程序环境中,想将用户源代码变成一个可在内存中执行的程序,通常可分为三步:编译、链接和载入。

编译和链接是为将用户程序从硬盘上调入内存并将其转化为可执行程序服务的。编译时,编译器需要的是语法正确,函数与变量的声明正确。一般而言,每个源文件都应该对应于一个中间目标文件。链接时,主要是链接函数和全局变量,所以可以采用这些中间目标文件来链接应用程序。链接就是目标文件相互链接自己需要的函数和全局变量,而函数可能源于其他目标文件或库文件。

2、编译型语言与解释型语言的区别是什么?

Java是一类特殊的编程语言,其程序也需要编译,但是却没有直接编译称为机器语言,而编译为字节码,然后在Java虚拟机上一解释方式执行字节码。

3、如何判断一段程序是由C编译的还是由C++编译的?

如果编译器在编译cpp文件,那么自定义宏_cpluslus就会被定义,如果是一个c文件被编译,那么_STDC_就会被定义。_STDC_是预定义宏,当它被定义后,编译器会按照ANSIC的标准来编译C语言程序。

C与C++编译方式不同。编写C/C++的兼容代码,需要如下格式:

#ifdef _cplusplus
  extern "C"{
#endif
      //code
#ifdef _cplusplus
  };
#endif

4、extern “C”的作用是什么?

C++是一种面向对象语言,支持函数重载,而C语言是面向过程语言,不支持函数重载,所以函数在被C++编译后再库中的名字与C语言不同。如果声明一个float f(int a, char b),C语言一般使用类似_f的内部名,而C++则将参数连在其中,内部名类似_f_int_char。因此,链接器无法解释C++程序对C语言函数f的调用。

C++提供了C语言替代连接说明符号extern "C"来解决名字匹配问题,该语句用在函数前:extern "C" float f(int a, char b),其目的是告诉编译器f()是C连接的,不需要按照C++的方式转换函数名,这样就可以正确链接到f()函数了。

上一篇 下一篇

猜你喜欢

热点阅读