面试-C++
来源:互联网 发布:常见的网络交流平台 编辑:程序博客网 时间:2024/06/05 03:52
- CC虚函数
- extern c
- Eg
- C C混编
- C编译
- Eg
- 多线程编程
C++ 虚函数
详见 虚函数表解析
有关虚函数的FAQ
extern c
Ref In c++ source, what is the effect of extern “C”
原问题是:
What exactly does putting extern “c” into C++ do?
For example:
extern "c" { void foo();}
extern “c”是linkage specification。简而言之,就是c++程序使用的是老的c代码gcc编译的.a或.o库时,需要特殊声明这个是特殊链接。
为什么呢?
C++有function overloading 机制,而c没有。G++编译器在链接函数时,不仅考虑函数名作为函数调用的ID,还要考虑其他信息(参数,arguments),但是gcc却仅仅将函数名当作唯一ID。extern “C”就是告诉G++,应当按照gcc的方式调用已经编译为二进制的函数。
Eg.
C++ C混编
foo.c
#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <stdio.h>int foo() { printf("hello from c foo\n"); return 0;}
使用gcc编译:
$gcc -c foo.c# will generate foo.o file# archive into static linked file .a$ar cr libfoo.a foo.o# libfoo.a binary file
main1.cpp
#include <iostream>extern "C" { int foo();}int main() { foo(); return 0;}
假如不使用extern “C”,会报错
undefined reference to `foo()’
编译:
$g++ -std=c++11 -o main -L. -lfoo
C++编译
当对foo.c使用g++编译时,就正常了。仅需对main.cpp修改:
int foo();...
g++编译过程:
g++ -c foo.c main.cppg++ -std=c++11 -o mian foo.o main.o
多线程编程
0 0
- C面试
- C++ 面试
- c面试
- C面试
- C++/C 面试
- c++/c面试宝典
- C面试汇总
- C面试汇总
- c/c++面试试题
- C面试二
- c/c++面试试题
- c语言面试题目
- C/C++面试题解
- c语言面试集
- c面试试题
- C程序员面试
- 面试试题c
- C/C++ 面试
- java获得项目绝对路径
- maven 打包跳过单元测试命令
- java--序列化对象
- STM32 系统时钟的配置
- JFinal学习
- 面试-C++
- 阻塞和非阻塞
- 为cocos2dx项目添加Android闪屏页
- 视图
- 二分贪心练习题--D(四个数和为0的组合数)
- matplotlib画矩形框
- 视图 备份数据
- eclipse Java was started but returned exit code=1
- 用1×2骨牌覆盖n×m棋盘,有多少种方法