日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“

發(fā)布時間:2025/3/21 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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ā)生錯誤:
void (*pf1) (int );/ / 指向一個 C++函數(shù) extern "C" void (*pf2) (int );/ / 指向一個 c 函數(shù) pfl = pf2;/ / 錯誤: pfl 和 pf 2 的類型不同

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ù)重載
// 錯誤: 兩個extern "C"函數(shù)的名字相同 extern "C" void print(const char*); extern "C" void print(int)
  • c++支持
class Smalllnt{/ * ... * /}; class BigNum{/ ... */};//C函數(shù)可以在C或C++程序中調(diào)用 //C++函數(shù)重栽了該函數(shù), 可以在C++程序中調(diào)用 extern "C" double calc(double); extern Smalllnt calc(const Smalllnts); extern BigNum calc const BigNum&);

總結(jié)

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。