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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

c/c++

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

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

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ù)重載
// 錯(cuò)誤: 兩個(gè)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“的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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