C++
文法
仮想関数
基底クラスで定義されている関数を、派生クラスの関数で定義を上書きできるように、基底クラスの関数(上書きされることがある関数)に取り付けておく属性
純粋仮想関数
基底関数で内容の定義を行わない仮想関数のこと
参照渡し
C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう
ペリフェラルのドライバクラスを作るとき、ペリフェラルの数字を参照したいのでそのペリフェラルの構造体メンバ変数のポインタを渡すことでその中身を参照していた。
しかしこの参照私というのを使うとよりいい感じ?に書ける可能性が出てきたので試してみたい。
tuple(型)
tuple型は、複数の型の値を保持する「タプル」を表現するためのクラスである。 → 戻り値どうやって確保するん? autoで記述して、tuple型クラス内のreturnから推測されて自動的に型が決まる?
コードフォーマット
clang-formatで成型する。個別の設定は .clang-formatに保存、設定可能。
ClangFormat
VSCodeでフォーマッタが動かないときがある,LLVMをインストールしてパス通せば良い.
WindowsのVSCodeでclang-formatが効かない時の確認と対処
Error write EPIPE using clang-format with visual studio code (Assumption: user settings ignored, default value added to each workspace) #83
lint
lint とは、主にC言語のソースコードに対し、コンパイラよりも詳細かつ厳密なチェックを行うプログラムである。静的解析ツールとも呼ばれる。(by Wikipedia)
cppplintがよい?
組み込みとC++
GCCのオプションも参照のこと
組込み現場の「C++」プログラミング 明日から使える徹底入門
組み込みシステム上でのC++
Using exceptions in C++ embedded software
matplotlibとの連携でグラフ表示
コンパイル時に定数生成
defineディレクティブなどを用いて、ビルド時に定数として結合しておきたい、c++ならconstexpr
を使うと楽に作れる
constexpr char build_time_str[] = "\r\n" __DATE__ ", " __TIME__ "\r\n"; constexpr char gcc_version_str[] = "gcc version : " ARM_GCC_VERSION "\r\n"; constexpr char git_branch_str[] = "git branch : " GIT_BRANCH_NAME "\r\n"; constexpr char git_tag_name_str[] = "git tag : " GIT_TAG_NAME "\r\n"; constexpr char git_info_str[] = "git info : " GIT_BUILD_INFO "\r\n";
使った関数とかメモ
文字列を浮動小数点に変換したい
std::stofを使っていたけど、C++17以降ならstd::from_charsを使ったほうが良さそう