C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. C++程序有時(shí)需要調(diào)用其他語(yǔ)言編寫(xiě)的函數(shù), C++使用鏈接指示( linkage directive)指出任意非 C++函數(shù)所用的語(yǔ)言
1.1 聲明一個(gè)非C++函數(shù)
// 可能出現(xiàn)在 C++頭文件<cstring>中的鏈接指示 // 單語(yǔ)句鏈接指示 extern "C" size_t strlen(const char *);// 復(fù)合語(yǔ)句鏈接指示 extern "C" {int strcmp(const char*, const char*);char *strcat(char*, const char*); }1.2 鏈接指示與頭文件
// 復(fù)合語(yǔ)句鏈接指示 extern "C" {#include <string.h> // 操作C風(fēng)格字符串的C函數(shù) }1.3 指向 extern "C”函數(shù)的指針
// pf指向一個(gè)C函數(shù), 該函數(shù)接受一個(gè)int返回void extern "C" void (*pf)(int);- 指向 C 函數(shù)的指針與指向 C++函數(shù)的指針是不一樣的類(lèi)型。 一個(gè)指向 C 函數(shù)的指針不能用在執(zhí)行初始化或賦值操作后指向 C++函數(shù), 反之亦然。 就像其他類(lèi)型不匹配的問(wèn)題一樣, 如果我們?cè)噲D在兩個(gè)鏈接指示不同的指針之間進(jìn)行賦值操作, 則程序?qū)l(fā)生錯(cuò)誤:
1.4 鏈接指示對(duì)整個(gè)聲明都有效
當(dāng)我們使用鏈接指示時(shí), 它不僅對(duì)函數(shù)有效, 而且對(duì)作為返回類(lèi)型或形參類(lèi)型的函數(shù)指針也有效:
//fl 是一個(gè) C 函數(shù), 它的形參是一個(gè)指向 C 函數(shù)的指針 extern "C" void fl(void(* ) (int ) );如果希望給 C++函數(shù)傳入一個(gè)指向 C 函數(shù)的指針, 則必須使用類(lèi)型別名 // FC 是一個(gè)指向 C 函教的指針 extern "C" typedef void FC (int);// f 2 是一個(gè) C++函數(shù), 該函數(shù)的形參是指向 C 函數(shù)的指針 void f2 (FC *);1.5 導(dǎo)出 C++函數(shù)到其他語(yǔ)言
//calc 函數(shù)可以被 C 程序調(diào)用 extern "C" double calc (double dparm) { / ... */ }1.5.1 對(duì)鏈接到 C 的預(yù)處理器的支持
有時(shí)需要在 C 和 C++中編譯同一個(gè)源文件, 為了實(shí)現(xiàn)這一目的, 在編譯 C++版本的程序時(shí)預(yù)處理器定義_ _cplusplus ( 兩個(gè)下畫(huà)線(xiàn) )。
#ifdef _ _cplusplus // 正確: 我們正在編譯 C++程序 extern "C" #endif int strcmp (const char*, const char* );1.6 重載函數(shù)與鏈接指示
- C語(yǔ)言不支持函數(shù)重載
- c++支持
總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha