C/C++言語でコードをコンパイルするのが面倒くさいんだけど...
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
C/C++言語は基本的にはGCC/Clang/Visual Studio等のコンパイラでコンパイルして実行しますが,インタプリタがあることをご存知ですか?
そんなあなたにC/C++言語でおすすめのインタプリタ2選を紹介します.
C/C++言語のインタプリタを利用すると,Python言語のようなスクリプトを書く感覚でコードを書けます!
目次
【C言語】PicoC
PicoCは,スクリプトを書くための非常に小さなC言語のインタプリタです.
Picoは,元々は無人航空機(UAV:Unmanned Aerial Vehicle)のオンボードフライトシステム用のスクリプト言語として書かれました.
※UAVの例としてドローンが挙げられます.
また,他のロボット,組込み,非組込みのアプリケーションにも非常に適しています.
PicoCのインストール
PicoCのビルドにはreadlineが必要なので,インストールしましょう(以下はUbuntu 22.04 LTSの例).
1 |
$ sudo apt-get install libreadline-dev |
PicoCのビルド手順は以下になります.
1 2 3 |
$ git clone https://github.com/jpoirier/picoc $ cd picoc $ make |
ビルドが終了すると実行ファイルpicocが生成されますので,実行ファイルがあるディレクトリをPATHに追加しましょう.($HOME/src/picocにPicoCをダウンロードした場合)
1 |
$ export $PATH:PATH=$HOME/src/picoc |
PicoCの使い方
PicoCの使い方は以下になります.
PicoCでprintf関数を利用するためにはstdio.hをインクルードする必要はありません.
また,main関数を定義する必要はありません.
picocを実行した後に,プロンプトで「printf("Hello World!\n");」と入力すると「Hello World!」と表示していることがわかります.
1 2 3 4 5 |
$ picoc -i starting picoc v3.2.2 ra97d94fa (Ctrl+D to exit) picoc> printf("Hello World!\n"); Hello World! picoc> |
1 2 3 4 5 6 7 8 9 10 11 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; } |
上記のhello.cをpicocでスクリプトファイルのように実行する方法は以下になります.
1 2 |
$ picoc hello.c Hello World! |
【C/C++言語】Cling
ClingはLLVMとClangのライブラリの上に構築されたインタラクティブなC/C++言語のインタプリタです.
標準的なインタプリタと比較すると,コマンドラインプロンプトを持ち,コンパイルにジャストインタイム(JIT)コンパイラを使用している点が優れています.
また,Clingはインタラクティブ・コンパイラと呼ばれています.
Clingのインストール
ビルド済みの実行ファイルは,こちらからダウンロードしましょう.
2022年6月現在,Ubuntu 22.04 LTSのclingのバイナリはありません.
Ubuntu 22.04 LTSを使っているあなたはソースコードからビルドしましょう!
PCのメモリは16GB以上を推奨します.8GBだとメモリが足りなくてビルドが中断する可能性があります.
こちらのビルド方法を紹介します.
clingディレクトリを作成してビルドします.
1 2 3 4 5 |
$ mkdir cling $ cd cling $ wget https://raw.githubusercontent.com/Axel-Naumann/cling-all-in-one/master/clone.sh $ chmod 755 clone.sh $ ./clone.sh |
そのままビルドすると以下のビルドエラーが発生します.
1 2 3 4 5 6 7 8 9 10 11 12 |
In file included from /home/chishiro/src/cling/src/utils/benchmark/src/benchmark_register.cc:15: /home/chishiro/src/cling/src/utils/benchmark/src/benchmark_register.h: In function 'void AddRange(std::vector<T>*, T, T, int)': /home/chishiro/src/cling/src/utils/benchmark/src/benchmark_register.h:17:30: error: 'numeric_limits' is not a member of 'std' 17 | static const T kmax = std::numeric_limits<T>::max(); | ^~~~~~~~~~~~~~ /home/chishiro/src/cling/src/utils/benchmark/src/benchmark_register.h:17:46: error: expected primary-expression before '>' token 17 | static const T kmax = std::numeric_limits<T>::max(); | ^ /home/chishiro/src/cling/src/utils/benchmark/src/benchmark_register.h:17:49: error: '::max' has not been declared; did you mean 'std::max'? 17 | static const T kmax = std::numeric_limits<T>::max(); | ^~~ | std::max |
この場合,utils/benchmark/src/benchmark_register.hに,以下の4行目のように「#include <limits>」を追加して下さい.
1 2 3 4 5 6 7 8 9 10 11 12 |
#ifndef BENCHMARK_REGISTER_H #define BENCHMARK_REGISTER_H #include <limits> #include <vector> #include "check.h" template <typename T> void AddRange(std::vector<T>* dst, T lo, T hi, int mult) { CHECK_GE(lo, 0); CHECK_GE(hi, lo); |
ビルドが成功すると実行ファイルbin/inst/clingが作成されました.
実行ファイルclingがあるディレクトリにPATHを追加します.($HOME/src/clingにClingをダウンロードした場合)
1 |
$ export PATH=$PATH:$HOME/src/cling/inst/bin |
Clingの使い方
Clingが実行できることを確認しましょう.
PicoCとは異なり,Clingでprintf関数を利用するためにはstdio.hをインクルードする必要があります.
なので,ClingはPicoCより少し手間がかかりますが,C++言語をサポートしているメリットがあります.
C言語のClingの使い方は以下になります.
「Hello World!」と表示されていることがわかります.
1 2 3 4 5 6 7 8 9 10 |
$ cling ****************** CLING ****************** * Type C++ code and press enter to run it * * Type .q to exit * ******************************************* [cling]$ #include <stdio.h> [cling]$ printf("Hello World!\n"); Hello World! [cling]$ |
hello.cの実行方法は以下になります.
1 2 3 4 5 6 7 |
$ cling < hello.c ****************** CLING ****************** * Type C++ code and press enter to run it * * Type .q to exit * ******************************************* Hello World! |
C++言語のClingの使い方は以下になります.
1 2 3 4 5 6 7 8 9 10 |
$ cling ****************** CLING ****************** * Type C++ code and press enter to run it * * Type .q to exit * ******************************************* [cling]$ #include <iostream> [cling]$ std::cout << "Hello World!" << std::endl; Hello World! [cling]$ |
1 2 3 4 5 6 7 8 9 10 11 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <iostream> int main(void) { std::cout << "Hello World!" << std::endl; return 0; } |
上記のhello.cppをclingでスクリプトファイルのように実行する方法は以下になります.
1 2 3 4 5 6 7 |
$ cling < hello.cpp ****************** CLING ****************** * Type C++ code and press enter to run it * * Type .q to exit * ******************************************* Hello World! |
まとめ
C/C++言語でおすすめのインタプリタ2選を紹介しました.
どちらも有用なので,うまく使い分けましょう!
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!