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