C LANGUAGE TECHNOLOGY

C言語からC++/Rust/Python/Go/Java言語の関数呼び出し

悩んでいる人

C言語からC++/Rust/Python/Go/Java言語の関数呼び出しを教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

C言語だと実装するのに面倒なことがありますよね.

そんなあなたにC言語からC++/Rust/Python/Go/Java言語の関数呼び出しを紹介します.

C言語と他のプログラミング言語の両方のメリットを活かしましょう!

C言語からC++/Rust/Python/Go/Java言語の関数呼び出し

C言語からC++/Rust/Python/Go/Java言語の関数呼び出しを紹介します.

C言語のコードは以下になります.

「Hello World!」を表示するprint_hello関数を呼び出していますが,C言語のコードには定義がありません.

他のプログラミング言語のコードでprint_hello関数を定義して呼び出します.

extern "C":C言語からC++言語の関数呼び出し

C言語からC++言語の関数呼び出しには,「extern "C"」宣言を利用します.

C++言語のコードは以下になります.

実行結果は以下になります.

no_mangle,extern "C":C言語からRust言語の関数呼び出し

C言語からRust言語の関数呼び出しには,「#[no_mangle]」と「extern "C"」を利用します.

※「extern "C"」はC++言語と同じですね.

Rust言語のコードは以下になります.

実行結果は以下になります.

CPython:C言語からPython言語の関数呼び出し

C言語からPython言語の関数呼び出しには,「CPython」を利用します.

CPythonでは,C言語でPython言語固有の呼び出しが必要になります.

C言語とPython言語のコードは以下になります.

実行結果は以下になります.

※必要に応じてPythonのバージョンを変更して下さい.

参考までに,以下のコードのようにPython言語のprint関数をC言語のコードに埋め込むことも可能です.

実行結果は以下になります.

※必要に応じてPythonのバージョンを変更して下さい.

c-shared:C言語からGo言語の関数呼び出し

C言語からGo言語の関数呼び出しにはビルドモードの「c-shared」を利用します.

Go言語のコードは以下になります.

実行結果は以下になります.

JNI:C言語からJava言語の関数呼び出し

C言語からJava言語の関数呼び出しには,「Java Native Method(JNI)」を利用します.

JNIでは,C言語でJava言語固有の呼び出しが必要になります.

C言語とJava言語のコードは以下になります.

※必要に応じてJNIのバージョンを変更して下さい.

実行結果は以下になります.

※必要に応じてJDKのパスを変更して下さい.

まとめ

C言語からC++/Rust/Python/Go/Java言語の関数呼び出しを紹介しました.

C言語と他のプログラミング言語を連携する時の参考にして下さい.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , ,