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