タグ

C++に関するyutaka_kinjyoのブックマーク (21)

  • CppCheckでC言語/C++のメモリリーク(解放漏れ)を静的解析で検出する。 | Futurismo

    メモリ解放漏れ・メモリ二重解放は組込みエンジニアにとって、背筋が凍る単語だ。 それは、即、残業しなさいという意味に転じる。 そこから、泥沼のデバッグにハマることがよくある。 そんな課題をスマートに解決するために、メモリ解放漏れやメモリ二重解放を検出するツール調べてみたので、メモメモ。 オープンソース CppCheckのインストールをしよう# Cppcheckを使うことでメモリ解放漏れを静的解析で見つけることが可能だ。CppCheckはその他にも、アロケーション(確保と解放)の不一致(メモリ二重解放),バッファオーバーランの検出ができる。OSSなので、誰でも無料で利用可能。 CppCheckのダウンロードはココから Cppcheckの使い方の日語訳は、以下のサイトで公開されている。 (ものすごく感謝!)今回はこれを参考に自分でも試してみる。 cppcheck 日語マニュアル - 一人ぼっ

    CppCheckでC言語/C++のメモリリーク(解放漏れ)を静的解析で検出する。 | Futurismo
  • gprofを使いこなす - minus9d's diary

    C/C++のコードの速度を改善するときに有効な方法は、処理時間を多く消費する関数を見極めて、その関数を改善することである。どの関数が(1)どれだけ処理時間を消費するか、(2)何度呼ばれているか、(3)どの関数を呼んでいる/どの関数に呼ばれているか、などを測定する行為をプロファイリングといい、その手助けをするツールをプロファイラと呼ぶ。今回はC/C++のプロファイラとして有名なgprofの使い方を紹介する。 プログラムの例 GNUプロファイラーによるコード処理速度の向上 のコードを参考にして作成した以下のコードをgprofでプロファイリングしてみよう。main()はa()とb()を100000回呼ぶ。b()はa()の約4倍時間を消費する。またmain()自身も、a()とb()を呼び出してその結果を待つ以外に、a()の約1/3の時間を消費する。 // main.cpp #include <cs

    gprofを使いこなす - minus9d's diary
  • Emacs で C/C++ の開発環境をめちゃガチャパワーアップしたまとめ

    はじめに# 次の業務が C/C++ をつかいそうなので, Emacs で C/C++ 開発環境を構築してみました. 題名は, なぜかけっこうアクセス数のあった Ruby 編にあやかった. Emacs で Ruby の開発環境をさらにめちゃガチャパワーアップしたまとめ | Futurismo [toc] IDE が備えるべき機能# 優れた IDE が備えるべき機能と Emacs での代表的な実現方法は以下. シンタックスハイライト/ インデント major-mode 検索・置換 たくさんあるよ. タグジャンプ gtags ggtags コード補間 auto-complete company エラーチェック flymake flycheck リファクタリング emacs-refactor インタープリタ・デバッカ emacs-dbgr プロジェクト管理 projectile ドキュメント参照

    Emacs で C/C++ の開発環境をめちゃガチャパワーアップしたまとめ
  • C++メモ - new演算子の有無による宣言 | システムエンジニアの戯言

    Javaの場合 下のようなコードを実行すると、どうなると思いますか? List 1-1 String name; // 文字列クラスの変数を宣言する。 name.toString(); // nameはNullなので、ぬるぽ発生! name変数のコンストラクタが呼び出されていないため、NullPointerExceptionという例外が発生してしまいます。 これは、Javaに慣れた方ならご存知の事かと思います。 では、これを回避するには、どうしたら良いでしょうか? 下のように、new演算子で初期化しておけば、問題なく実行できますね。 (説明のため、便宜上new演算子を使用していますが、普通は""で初期化します。""を使用する方がメモリ効率の関係上有利です。) List 1-2 String name = new String("Hello World!"); // 文字列を代入する nam

    C++メモ - new演算子の有無による宣言 | システムエンジニアの戯言
  • Chapter 56. Building native binaries

    Support for building native binaries is currently incubating. Please be aware that the DSL, APIs and other configuration may change in later Gradle versions. The various native binary plugins add support for building native software components, such as executables or shared libraries, from code written in C++, C and other languages. While many excellent build tools exist for this space of software

  • マングリング - debian36の日記

    今日の午後は、ずっとC++(g++)と闘っていました。。。 これまで C言語でコーディングされていたシステムの一部が、C++に変更されたたため、自分が担当する部分もそれに対応する必要がありました。 ※ プロジェクト進行中に言語変更なんて自由やなぁ・・・(^^; そんなん、簡単やろ〜、 C++って、C言語から派生したものやろ? C++って、C上位互換やろ? どうせ、バイトコードになっちゃえば C も C++ もいっしょやろ? 的に、思っていたのですが、問題の解決に午後丸々かかっちゃいました・・・ なんか身体的に疲れちゃいました。 組み込みなどの一部分野では、じわじわとC言語からC++言語への移行がはじまっている(? : 未確認情報)ので、 CとC++が混在するシステム(CとC++で1つの実行体)を作るケースがあるかもしれません。 そんな場合に役立つかも、ということで、今日学んだことをまとめま

    マングリング - debian36の日記
  • nmコマンドでC/C++のシンボルテーブルを見る、C++の名前マングリング、"C"リンケージ、あるいはリンカに関するメモ - 百日半狂乱

    前回(g++)と前々回(gcc)のサンプルコードを使ったC++のマングリングや"C"リンケージに関するメモ. nmコマンドでサンプルコードのシンボルテーブルを覗いた後に、C++からCの関数を呼び出す場合のサンプルコードを示す. 特にリンケージ周りの説明は正確性を欠いているやもしれませんのでご容赦下さい.より詳細な説明は参考リンク等を参照して頂ければと思います. nmコマンド nm は、UNIXや類似のオペレーティングシステムに存在するコマンドであり、バイナリファイル(ライブラリ、実行ファイル、オブジェクトファイル)の中身を調べ、そこに格納されているシンボルテーブルなどの情報を表示する。デバッグに使われることが多く、識別子の名前の衝突問題やC++の名前修飾の問題を解決する際に補助として用いられる。 GNUプロジェクトでは、高機能の nm プログラムを GNU Binutils パッケージの一

    nmコマンドでC/C++のシンボルテーブルを見る、C++の名前マングリング、"C"リンケージ、あるいはリンカに関するメモ - 百日半狂乱
  • C++ static 修飾子 入門

    static 修飾子とは 「static」は静的という意味で「dynamic(動的)」の対義語である。 下記の様に変数宣言または関数宣言時に「static」を付加することで、付加された変数または関数が静的であることを宣言する。 static int var; static int func() { return 0; } ここで言う「静的」の具体的な意味は変数、関数の種類によってかなり異なる。なので、static は初級者にとってマスターしづらいもののひとつではないかと思う。 稿では、それぞれの種類について具体的に解説し、お約束の演習問題も用意している。 理解しづらい概念も、手を動かして演習問題を解いていけば誰でもマスターできるものなので、ちゃんと演習問題をクリアーしてほしい。 static 関数 下記のように、同じプロジェクトに含まれる複数のファイルに、同じ関数名・引数の関数があると、

  • ヘッダーファイルは慎重に扱わないと危険です

    ホーム < ゲームつくろー! < C++踏み込み編 < ヘッダーファイルは慎重に扱わないと危険です その7 ヘッダーファイルは慎重に扱わないと危険です ヘッダーファイルは関数やクラスのプロトタイプを宣言するファイルです。今更なんだと思われるかもしれません。しかし、ヘッダーファイルは慎重に扱わないと取り返しのつかないバグを生んでしまいます。それこそシステムが崩壊するほどのバグになることも時にはあります。 ヘッダーファイル軽んずべからず。この章はそういったヘッダーファイルにまつわるお話です。 ① ヘッダーファイルって何なのか? 冒頭でも述べましたように、ヘッダーファイルは関数やクラスのプロトタイプ宣言をするファイルです。プロトタイプ宣言とは、「変数の名前、型」そして「関数名、引数の型、戻り値の型」のみを記述する事を指します。クラスの場合、クラス名と共にクラスが持つメンバ変数やメンバ関数がプロト

  • 銀天ライブラリ 導入方法

  • Boost C++ library RPM packages for CentOS 6

  • C++ iterator 入門

    C++ iterator(イテレータ) とは iterator(イテレータ)とは抽象化されたポインタのことで、コンテナ の要素を指し、移動、要素を参照・変更することが出来る。 iterator(イテレータ)は日語では「反復子」と訳されるが、最近では「イテレータ」と呼ぶことが多いと思う。 もともとは、外部ライブラリであった STL(Standard Template Library) で導入されたものだが、現在では C++ の標準に取り込まれている。 コンテナクラスとSTLアルゴリズムを結びつける結合器的な役割を持つ STLアルゴリズムも現在は標準アルゴリズムとしてC++に取り込まれている イテレータを引数にとる、便利なアルゴリズムが多数用意されている 標準アルゴリズムを使用せず、イテレータ経由でコンテナを操作し、なんらかの処理を行うことも可能 これは、自分でアルゴリズムを書いていることに

  • ソースコードからのビルドとインストール (Windows編) — Choreonoid ホームページ

    準備¶ コレオノイドをソースコードからインストールするには、ビルドに必要なツールとライブラリを予め準備する必要があります。 必要なツール Visual C++ 2010 CMake (2.8.11.2) 必要なライブラリ Boost (1.50.0) Qt (4.8.4) Eigen (3.2.0) まず、上記のツールとライブラリをインストールをして下さい。各ライブラリの括弧内の数値は、当方で利用し動作を確認したバージョンで、2013年8月時点での目安となるものです。これらより古いバージョンのものに必ずしも対応しないわけではありませんし、一方でこれらよりバージョンが上のものでビルドに失敗することもあり得ます。(正確に対応バージョンを特定するのは困難ですので、このような記述をご容赦ください。)一般的にはバージョン番号の2番目の値までが同じであれば、同様に使えると考えてよろしいかと思います。

  • GitHub - dmonopoly/gtest-cmake-example: Helpful example of a gtest and cmake set up for C++.

  • 入門ガイド — Google Test ドキュメント日本語訳

    はじめに:なぜ Google C++ Testing Frameworkを使うのか¶ Google C++ Testing Framework を上手に活用すれば,より良い C++ のテストを書くことができます. LinuxWindows,そして Mac,あなたが C++ のコードを書いているこれらの環境に関係なく Google Test を利用できます. では,優れたテストを書くにはどうすればよいのでしょうか?Google C++ Testing Framework は,どのように役立つのでしょうか?我々は次のように考えています: テストには, 独立性 と 再現性 が必要です.別のテストの結果に依存して成功したり失敗したりするテスト,をデバッグするのは非常に面倒な作業です.Google C++ Testing Framework は,各テストを異なるオブジェクト上で実行することによって

  • 【C++】参照とポインタ | ヘッドウォータースのブログ TechNote

    こんにちは。良昌です。 最近cocos2d-xを使う機会があり、初めてC++に触れました。C++について様々な記事を読ませて頂いた中で、私自身が参照、ポインタについての整理を出来ていないという事に気付いたので、これを機に纏めてみたいと思います。 私は「結局、参照とポインタってどう使い分けるの?」という疑問を持っていました。ですので、同じ疑問を持っている方に対し、この記事が少しでも参考になればと思っています。私は分かり難い点を少しずつ整理することで、この問題を解決することができましたので、順を追って説明していきたいと思います。 ■参照 参照とポインタを使い分けるにあたって、先に参照を理解しておいたほうが、ポインタを理解し易いと思いますので、まずは参照について説明していきたいと思います。 C++における参照の概念は、他言語と同様、「参照先のオブジェクトを指し示すオブジェクト」となります。 宣言

    【C++】参照とポインタ | ヘッドウォータースのブログ TechNote
  • C++の基礎 : C++ の基本知識

    C++の基礎 : C++ の基知識 はじめに このチュートリアルでは、C 言語は知っているが C++ 言語については知らない方を対象に、 C++ 言語の基的な使い方を解説していきます。 C++ テンプレートのような高度な言語機能については解説しません。 それらについては専門書をご参照ください。 このチュートリアルでは、C 言語の知識があることを前提としています。また、所々に Java 言語との比較について言及していますので、Java 言語の知識があることが望ましいですが、必須ではありません。

  • C++用のRESTクライアント restclient-cpp を試してみる - def yasuharu519(self):

    CやC++ででhttpリクエストを送りたい場合、libcurlが 使われる場合が多くありますが、 libcurlはC言語で書かれているため、普段C言語を触ってない自分としては ちょっと扱いづらいです。 そのため、C++で http リクエストを送信したい場合に、簡単に使えるライブラリを 探してみました。 見つかったのは以下のようなところ。 cpp-netlib poco C++ libraries mrtazz/restclient-cpp 今回は、この中でも一番扱いが楽そうな mrtazz/restclient-cpp を使ってみました。 インストール mrtazz/restclient-cpp では、ビルドに autoconfが使われているため、その作法に従ってビルドします。 $ git clone https://github.com/mrtazz/restclient-cpp $

    C++用のRESTクライアント restclient-cpp を試してみる - def yasuharu519(self):
  • namespace

    About 標準C++ namespaceについて 以前ネット上で検索して見つからず、途方に暮れたのがこのnamespace(名前空間)だ。 2007/10/09 "using namespace seal::foo;"と書いていたのを"using seal::foo;"に修正。(Thanks to デフォルトの名無しさん) 名前空間とは 従来のC、及び標準化以前のC++の識別名はプログラムを構成する全要素中で一意である必要がある。例えば、stdio.hをインクルードすると、独自にFILEという型を作ることはできない。名前が衝突するため、コンパイルエラーとなるからだ。 標準ライブラリの型名や関数名は誰もが知ってるから、衝突が起こることはまずないが、違うベンダが開発したライブラリを組み合わせて使ったりすると、名前の衝突が起きる可能性がある。 そこでC++に導入されたのが名前空間である。名前空

  • g++ - C++入門

    g++ は、 GNU GCC (GNUコンパイラコレクション) の C++ コンパイラコマンド(C++コンパイラ)です。g++の主な使い方、オプションなどを紹介します。一部の環境では、c++コマンドの実体は、g++コマンドです。c++コマンドについては、「c++」をご参照ください。正式なリリースの最新版は、g++ 7.2です。 読み方 g++ じー ぷらす ぷらす、じー ぷらぷら 概要 g++ は、GNU の GCC に含まれる C++ のコンパイラ(C++コンパイラ)です。Unix や Windows で g++ コマンドとして利用します。 FreeBSD 10.0-RELEASE以前のFreeBSD の場合、デフォルトで C++ コンパイラとして g++ がインストールされていました。FreeBSD の g++ コマンドと c++ コマンドは、同じものでした。FreeBSD 10.0-