近年の大規模・複雑化したプログラムにおいて、不具合の検出はますます困難になっています。 特にオーバーフローや未初期化変数の使用などのバグは、致命的な不具合につながるだけでなく、それに加えて複数のファイルにまたがる「特定のパス」を実行した時にのみ発生することもあり、デバッグでの検出には労力を要します。 さらに、どんなに時間をかけても目視によってすべての実行パスを検証することは、現実的ではありません。 静的解析ツールC/C++testでは、このような致命的なバグが潜んでいる場合でも、静的解析の「フロー解析」機能で、プログラムのあらゆるパスをシミュレートし、バグを早期に発見します。また、ソースコード品質の底上げに貢献する「コーディング規約チェック」機能を搭載しているため、バグの作りこみを抑制し、ソースコードの可読性と保守性を強化します。 静的解析とは静的解析は、ソフトウェアの解析手法の一種で、コ
C/C++の静的解析は、どう考えても大変なんだけどどう考えても需要が高いので、やはり色々なソフトウェアや事例があるようだ。まとまった情報が欲しいけど見つからなかったので自分の調べた範囲でまとめることにした。 他にも耳寄りな情報があったら教えてほしい。 静的解析を行うことができるソフトウェア 調べてみると結構たくさんある。それぞれの特徴とかあまりよくわからない。 (個人的には、とりわけ網羅的な形式的検証ができるツールの性能に興味があるので、それを中心に集めていたが、やはり網羅的とは限らないで探すともっとたくさん見つかるようだ。もちろん網羅性にはトレードオフがある) Frama-C …… C言語に形式手法を適用するための汎用のフレームワークで、静的検証のためのプラグインも多数(WPとかValueとか)存在する。網羅的な検証から発見的な手法、動的な手法まで様々ある。研究で使うのに便利そう Ast
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 標準ライブラリのストリームクラスを使って、ファイルに対する入出力を行えます。これら、ファイルストリームのクラス群は、次のようになっています。 ファイルストリームのクラス構造 読み取り用の basic_ifstream<>、書き込み用の basic_ofstream<>、読み書き両用の
C/C++のメモリリークチェックツールと言えばvalgrindが有名だが、メッセージの詳細を日本語で説明しているサイトはあまりないようなので調べてみた。 valgrindは、mallocやnewで確保されたメモリ領域がポインタによって辿れるかどうかをチェックすることでメモリリークを検出する。以下の例を見てみよう。 char *g_ptr; void func(){ char *p = new char[32]; // (A) } int main(){ func(); } main関数から始まり、そこからfuncが呼ばれ、現在 (A) の位置にいるとしよう。このとき、メモリ上にはmain関数とfunc関数で定義された変数があり、また、グローバル変数であるg_ptrも有効な状態で存在している。func関数が抜けると変数pは無効になる。 このpやg_ptrのようなデータのことをroot-set
[2022-06-22] さすがに情報が古くなってきたため、最新の規格に合わせて本記事の内容を再編集した記事を新たに書きました。よろしければ、こちらの新記事「C++20スマートポインタ入門」をご参照ください。 C++11では、unique_ptr<T> shared_ptr<T> weak_ptr<T>の3種のスマートポインタが新たに追加された。これらのスマートポインタは、いずれもメモリの動的確保の利用の際に生じる多くの危険性を低減する目的で使用されるが、それぞれ独自の考え方と機能を持っている。3種のスマートポインタを適切に使い分けることで、安全性と開発速度の向上が見込めるだけでなく、プログラマの意図に合わせて「ポインタ」を記述し分けることができる、非常に強力なツールとなる。 本解説では、スマートポインタについて初めて学ぶ人を対象に、C++11で追加された3種のスマートポインタの機能と使い
なんびとたりとも俺の前は走らせねぇ ガチバトルです。 rapidjson - A fast JSON parser/generator for C++ with both SAX/DOM style API - Google Project Hosting Rapidjson is an attempt to create the fastest JSON parser and generator. Small but complete. Support... https://code.google.com/p/rapidjson/ fastest をうたうとは度胸があるなーと思いながら、半信半疑で試してみました。 rapidjson も picojson 同様に、ヘッダファイルだけあればコンパイル出来る C++ 向け JSON パーサ(およびシリアライザ)です。 まずは rapidjso
A fast JSON parser/generator for C++ with both SAX/DOM style API Tencent is pleased to support the open source community by making RapidJSON available. Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. RapidJSON GitHub RapidJSON Documentation English 简体中文 GitBook with downloadable PDF/EPUB/MOBI, without API reference. Build status Linux Windows Coveralls Introduction RapidJSON i
数年前,まだ私が C++ でゲームを書いていたころ,深すぎる関数のネストは「一旦変数に入れ」て「読みやすくする」というコーディングスタイルにだいたい落ち着いていた.もちろん,「これは一旦別名を付けるだけで,変数に再代入する気はないよ」ということで const も付ける.ただあまり大きなデータのコピーは嫌だよねということで,戻り値が std::string や構造体の関数呼び出しを「一旦変数に入れる」ときは const 参照を好んで使っていた. A(B(C(a), b, D(E(c), d, e))); 「む,なんて読みにくいコード.ばらせよ」 const int target_id = C(a); const MessageBody& message_body = D(E(c), d, e); const Message& msg = B(target_id, b, message_bod
このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 constexprは、汎用的に定数式を表現するための機能である。 constexprは、「constant expression (定数式)」の略語である。 この機能を使用することで、コンパイル時に値が決定する定数、コンパイル時に実行される関数、コンパイル時にリテラルとして振る舞うクラスを定義できる。 定数式の例として、パラメータの値を2乗して返す関数square()は、以下のように記述する: #include <cassert> constexpr int square(int x) { return x * x; } int main() { constexpr int compile_time_result = square(3);
JetBrainsのデスクトップ製品を全て利用可能 All Products PackサブスクリプションはJetBrainsのデスクトップ製品(CLion、DataGrip、GoLand、IntelliJ IDEA Ultimate、PhpStorm、PyCharm Professional、ReSharper、Rider、RubyMine、WebStorm)を全て利用可能なサブスクリプションパックです。各IDEからAll Products Packへアップグレードも可能です。 AIでIDEを強化 AI Assistant(有償)を使うことでリファクタリング、ドキュメントやコミットメッセージの作成など、様々な場面でAIによる支援を受けることが出来ます。 ・AI Assistant サムライズムからAll Products Packを購入する理由 サムライズムはJetBrains公式の日本語
json11とは C++11で書かれたjsonライブラリで 使い方が綺麗なため、好まれて使われていると思います 私は、以前はpicojsonを使ってましたが最近はjson11を使ってます https://github.com/dropbox/json11/blob/master ここから json11.cppとjson11.hppをダウンロードして使ってます 使い方 https://github.com/dropbox/json11/blob/master/test.cpp にサンプルが書いているので読めばわかりますが、補足します jsonパース サンプルのように const string simple_test = R"({"k1":"v1", "k2":42, "k3":["a",123,true,false,null]})"; string err; auto json = json
初歩的なとこで突っかかったのでメモ程度に。 本記事ではVisual StudioのプラグインであるVisual C++ for Linux Developmentに最近追加された機能を紹介します。 まずVisual C++ for Linux Developmentとは何かという話ですが、これは名前の通りVisual StudioでLinux向け開発をサポートするプラグインです。 プラグイン自体は以前から公開されていて、クロスコンパイルに関する方法の解説記事が上がっていたりします。 Visual C++ for linux Development を軽く使ってみた Visual C++ for Linux Developmentつかってみようとしたらハマったけど動いた さて。ここからが本題ですが、2016年8月19日に同プラグインではMakefileプロジェクトが新たにサポートされました。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く