C++ での extern 'C' の使用法の詳細な説明
extern
簡単に言うと、extern "C" は、C++ が C との互換性を保つために C 言語のシンボルを宣言または定義する方法です。言うのは簡単ですが、理解するにはまだ少し時間がかかります。まず、C++ と C の違いから始めなければなりません。
シンボル
コードから実行可能プログラムまで、コンパイルとリンクという 2 つのプロセスを経る必要があることは誰もが知っています。コンパイル フェーズでは、構文検出とコード拡張も行われます。変数をシンボルに変換すると、リンク時に実際にはシンボルを介して配置されます。コンパイラーが C および C++ コードをコンパイルする場合、変数をシンボルに変換するプロセスは異なります。この記事で使用するコンパイラは gcc4.4.7 です
まず簡単なコードを見てみましょう/* hello.c */ #include <stdio.h> const char* g_prefix = "hello "; void hello(const char* name) { printf("%s%s", g_prefix, name); }
ログイン後にコピー
$ nm hello.o 0000000000000000 D g_prefix 0000000000000000 T hello U printf
ログイン後にコピー
0000000000000000 T _Z5helloPKc U __gxx_personality_v0 0000000000000000 D g_prefix U printf
ログイン後にコピー
2 で始まり、ネストがある場合は、その後に N が続きます。名前空間、クラス、関数の名前は長さであり、 E
3 で終わります。ネストがない場合は、直接名前の長さの後に名前が続きます
4。パラメータリスト、型とシンボルの対応関係は以下の通りです
int -> i float -> f double -> d char -> c void -> v const -> K * -> P
ログイン後にコピー
/ * filename : test.cpp */ #include <stdio.h> namespace myname { int var = 42; } extern int _ZN6myname3varE; int main() { printf("%d\n", _ZN6myname3varE); return 0; }
ログイン後にコピー
$ gcc test.cpp -o test -lstdc++ $ ./test 42
ログイン後にコピー
extern "C" { int func(int); int var; }
ログイン後にコピー
extern "C" int func(int); extern "C" int var;
ログイン後にコピー
C++ での extern "C" の使用方法の詳細な説明と関連記事については、PHP 中国語 Web サイトに注目してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
2週間前
By DDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.チャットコマンドとそれらの使用方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7518
15


CakePHP チュートリアル
1378
52


Steamのアカウント名の形式は何ですか
80
11


NYTの接続はヒントと回答です
21
67

