C++11とC++14とSystemC
C++11やC++14といった新しいC++でSystemCを使ったらどうなるか軽く試したメモ
C++11
C++11でSystemCがどうなるかについては↓の資料にまとめられています。
http://www.nascug.org/events/17th/black_cpp11_2_27_2012.pdf
一番気になったのはテンプレートについて。
C99だと>
が二つ続く際は右シフトと認識しない様にスペースが必要。
でもC++11ではちゃんと判別してくれる様です。
実際にやってみた。
#include <systemc.h> int sc_main(int argc, char *argv[]) { sc_signal<sc_uint<5> > c99; sc_signal<sc_uint<5>> cpp11; //こっちはC++11専用 }
C99環境だと
clang++ -O2 -Wall -I. -I/home/ginnyu-tei/lib/SystemC-2.3.0_Debug//include -c main.cpp main.cpp:6:25: error: use of undeclared identifier 'cpp11' sc_signal<sc_uint<5>> cpp11; ^ main.cpp:6:30: error: expected a type sc_signal<sc_uint<5>> cpp11; ^ 2 errors generated. make: *** [main.o] エラー 1
もちろんエラー
次は同じコードをC++11環境でやってみる。
C++11環境にするにはオプションに-std=c++11
を追加する。
(gccのバージョンによっては-std=c++0x
)
clang++ -O2 -Wall -std=c++11 -I. -I/home/ginnyu-tei/lib/SystemC-2.3.0_Debug//include -c main.cpp clang++ -o run.x -L. -L/home/ginnyu-tei/lib/SystemC-2.3.0_Debug//lib-linux64 -lsystemc -lm main.o
問題なくビルド出来ました。
C++14
C++14では2進数表記が追加される様です。
ドラフト規格ですが、コンパイラが独自規格で実装している様なので試してみました。
#include <systemc.h> int sc_main(int argc, char *argv[]) { sc_uint<5> hoge; sc_uint<32> piyo; hoge = 0b10000; piyo = 0b10101010010101010000000011111111; cout << std::hex << "hoge = " << hoge << endl; cout << std::hex << "piyo = " << piyo << endl; return 0; }
実行結果
[ginnyu-tei@localhost SystemC_Test]$ ./run.x SystemC 2.3.0-ASI --- Mar 9 2014 13:23:24 Copyright (c) 1996-2012 by all Contributors, ALL RIGHTS RESERVED hoge = 10 piyo = 0aa5500ff
C++14の新機能はまだまだあるけどそれは正式な規格になってから調べる