2017年10月26日木曜日

CとC++

 とりあえずJSF++は全部機械翻訳したので(データは某所Gitにおいてあります)、じゃぁ次は使う番だ、ということで、試しにマイコンでC++のコードを走らせてみた。

 いままではCしか使っていないので、C++は使ったことがなかった。
 makefileをちょっと書き換えて、CPPもビルドできるようにした。gcc c++のオプションはgccのそれをそのまま使ったので、c++では使えないぞ、という警告がいくつか出てる。

 ヘッダファイルとか作るのが面倒だったので、externとかべた書きしてる。明らかにルール違反。

 とりあえず、C++といえばクラスだろ、ということで、試しに書いてみた。

#include 

extern "C" void test_func(void);

class Hoge_class
{
public:
 void set_value(int value)
 {
  val = value;
 }
 void print_value(void)
 {
  printf("value:%d\n", val);
 }
protected:
private:
 int val;
};

void test_func(void)
{
 printf("test_func\n");

 Hoge_class cls1, cls2;

 cls1.set_value(123);
 cls2.set_value(456);

 cls1.print_value();
 cls2.print_value();
}


extern void test_func(void);
test_func();

 結果としては、ちゃんと予想通りに表示される。

 ということで、簡単ながらマイコンでもC++が動くのは確認できた。

 もっとも、STM32Cubeが吐くコードはCコードだから、これを全部C++に移植するのは無理ゲー。おそらくF-35だって全部が全部C++じゃないだろうから、このあたりは妥協することにする。

***

 JSF++の4.2.1 "Should, Will, and Shall Rules"がいまいちよくわからなかったので、英語が得意そうな知り合いに聞いてきた。会うの何年ぶりだろうか。積もる話もいろいろ。頭の中も似たような感じなので、ちょっと話題を出せばあっという間に膨らんで、いろいろ話せて楽しかった。ウチの周りじゃこういう話できる人は皆無なので、話して楽しい人と話す機会ってのはかなり貴重。
 閑話休題。

 JSF++ではルールに関してShould, Will, Shallの3段階があるけど、曰く、Shouldは提案、Willはもっと強い感じ、Shallは強制的、という感じらしい。
 もっとも、JSF++ではShould, Will, Shallにかかわらず、ルールを無視するには手順を踏む必要がある。
 「「shall we dance?」というのは、聞いている感じだけど、shallでほとんど強制」みたいな例えが普通に出てくる。知識ある人ってすげーな、と。


 大昔にmbedを使ってた頃はC++を少し触った気がするけど、もうすっかり忘れてる。C++でパフォーマンスがどれくらい変化するのかはわからないけど、キチキチまで最適化する必用があるようなコードが必要になる機会はめったにないので、とりあえずC++で遊んで見る予定。

0 件のコメント:

コメントを投稿