タグ

Cとプログラミングに関するiwwのブックマーク (140)

  • Cppcheck(C++ソースの静的解析ツール) - 閑古鳥

    SourceForge.net: cppcheck Hudsonのプラグインを漁っているときに見つけた、C++のソースコードを静的に解析してくれるオープンソースのツール。面白そうなので試してみました。 インストール githubにソースが公開されているので、git cloneなりgithub上のアーカイブをダウンロードするなりしてソースを落としてビルドします。Windowsの場合VS2008のソリューションファイルが付いているので、VCBuildなりdevenv.exeなりで簡単にビルドすることができます。 使ってみる VCでビルドするとcli/フォルダの下にdebugもしくはreleaseフォルダができて、その下にcppcheck.exeが作成されます。実行ファイルができたらとりあえず引数無しで実行すると使い方が出てきます。 -a オプションで警告を全部表示(省略するとファイル毎に最初の

    Cppcheck(C++ソースの静的解析ツール) - 閑古鳥
  • 「CCFinderX」でコードクローン分析 - jun-ichi.blog.hatena

    コードクローン(重複コード)とは、ソースコード中の全く同じあるいは類似したコードの断片。一般に、コードクローンが存在するソースコードは保守が困難になる。これは、誤りを含んだコードを複製することでその誤りが分散してしまうことや、機能変更を行う際にクローンを探して、同様の対応が必要かどうかを調査する必要があるためである。コードクローンを検出するためには、単純なテキスト比較では不十分であり、言語の構文レベルでの比較が必要となる。 CCFinderXは、フリーのコードクローン検出ツール。2004年の未踏にも採択されているようだ。 CCFinderXはコードクローン検出ツールです。Java, C/C++, COBOL, VB, C#のソースコードから、コードクローン(重複コード)を検出します。 CCFinderXは、拙作CCFinderのメジャーバージョンアップであり、新しい設計と技術により、性能の

    「CCFinderX」でコードクローン分析 - jun-ichi.blog.hatena
  • ソースコードのメトリクス(品質測定)を行うツール - ふにゃるんv2

    前回は、ccccってツールを試したんですが、id:akiramei さんの8/21のネタで、SourceMonitorが紹介されており、もう少し調べてみる事に。 Source Monitor SourceMonitor http://www.campwoodsw.com/sourcemonitor.html id:akiramei さん。…元は どっとねっとメモさんが紹介されていたツールです。 ウィザード形式で、解析するフォルダを指定できるのは便利ですね。 2 posted by (C)wacky 選択できるプログラム言語は、以下の通りです。 3 posted by (C)wacky 一通りの有名な言語を選択できるのは、嬉しいですね。 読み込ませると、以下のようなメトリクス収集をしてくれます。 6 posted by (C)wacky 7 posted by (C)wacky グラフ表示し

    ソースコードのメトリクス(品質測定)を行うツール - ふにゃるんv2
  • GNU make 日本語訳(Coop編) - ルールの記述

    makefileに現れるルールは、いつ、どうやって特定のファイル——これをターゲットといい、ほとんどはルールひとつにつき1つだけです——を作り直すかを指示します。ルールはターゲットの依存関係である別のファイルや、ターゲットを作成したり更新したりするためのコマンドを列挙します。 ルールの順番に意味はありません。ただし、makeにターゲットを与えるためにあるデフォルトゴールを他の方法で指定しなかった場合を除きます。デフォルトゴールとは一番初めのmakefileの最初のルールのターゲットのことです。最初のルールに複数のターゲットがある場合、一番初めのターゲットだけをデフォルトとみなします。 ただしこれには、ピリオド(".")で始まるターゲットは、一つ以上のスラッシュ("/")のようなものを含んでいない限りはデフォルトにはならない、それから型ルールを定義するターゲットはデフォルトゴールとして機能し

    iww
    iww 2011/08/18
  • Cライブラリを書くベストプラクティス - YAMDAS現更新履歴

    LWN.net で知ったのだが、David Zeuthen という人が、C 言語でのライブラリについて網羅的なガイドを公開している。 現時点でパート5まで書かれているが、これで全部なのだろうか。いずれにしても相当な量である。これはいずれ書籍化されるんじゃないかしら。個人的にはネットワーキングが対象外なのが残念だが、確かにここで扱う話じゃないか。 この分野はCが生きる場所じゃないかね。

    Cライブラリを書くベストプラクティス - YAMDAS現更新履歴
  • CUnit チュートリアル

    CUnit とは、C言語開発において単体テストを支援する 「テスティング・フレームワーク」です。 もちろん、きちんとした設計者であれば、 CUnit のような仕組みがあろうと無かろうと、 自分で作った分の設計者テストは言われなくても実施するでしょうし、 組織としてきちんとしていれば、すでに何らかの仕組みは構築しているでしょう。 ですが、もし今まで単体テストをチーム内の各設計者が バラバラに実施していたということであれば、 CUnit を試してみる価値はあります。 また、XP(eXtreme Programming) のようなスタイルを構築したいと思っているのであれば、 CUnit を必須、としてしまうのも一つの手です。 ここでは、Cygwin 環境に CUnit をインストールして使ってみます。 導入 テスト環境の概説 使ってみよう アサート・マクロ テスト・レジストリ テスト・スイート

  • どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。

    確かにCでしか書けない類のプログラムは存在する(例を挙げるならKernel)が、それはCの存在を赦す理由にはならない。確かにCに輪をかけてさらにダメな類のプログラミング言語は存在する(例を挙げるならC++)が、それはCの存在を赦す理由にはならない。確かにCでしか書けないダメプログラマは存在する(例を挙げてほしければここにおまえの名前を入れろ)が、それはCの存在を赦す理由にはならない。結論:C死ね。 そもそも計算機にできて算盤にできないことなど存在しない。存在しないんだぞ。なのに何故人はプログラムを書くのか。それはオートメーションのためなのであり、奴隷的使役から人類の尊厳を開放して、この地上に楽園を築くためである。まあそこまで大上段に振りかぶって普段から書いてる輩はいないにせよ、プログラミングとは楽をするため、豊かな人生を実現するため、誰かの幸福のために行うものだ。違うか?じゃあなぜプログラ

    どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。
    iww
    iww 2011/05/17
    そんなリッチな言語が使える環境ばっかりじゃないしなぁ
  • 3.3.5.1 関数の引数としての可変長配列

    関数に渡す配列の大きさを, 関数に渡す引数で与えられる. // 以下は C99 のプログラムです. #include <stdio.h> // 配列の大きさを関数宣言で決められる. void func(int m, int data[m]) { int i; for(i=0; i<m; i++) data[i] *= 10; } int main(void) { int n, i; n = 10; int x[n]; // 配列のサイズを, プログラム実行時に与えられる. for(i=0; i<n; i++) x[i] = i; func(n, x); for(i=0; i<n; i++) printf("%d\n", x[i]); return 0; } ただし, 配列dataの大きさを決定する時点で, 大きさmが決まっている必要がある. 関数宣言は前から順に評価されるので, 上の例では

  • プログラミング言語 C の新機能

    4. 配列 今回の C 言語では、配列をより使いやすくするための機構が組み込まれました。その代表が可変長配列の機能でしょう。章ではそれら追加機能について説明します。 4.1 可変長配列 ある関数に入る毎に違った大きさが必要になる配列(可変長配列)を、今まではどのように作成していました? その作成方法は、大体次に挙げる方法のどれかでしょう。 (1)あらかじめ最大の配列を作る方法。もし最大の大きさを見積もることができるのであれば、あらかじめその最大の大きさの配列を作ってそれを利用するという方法があります。しかしこの方法では最大が見積もれる時にしか使用することができず、また必ずしもメモリを有効に使用することができません。 (2)malloc を使う方法。必要となる大きさを malloc で確保し、ポインタに割り当てて使うという方法があります。しかし、この方法では、一般的に malloc 関数の

  • pthread のキャンセル

    ●キャンセルとは pthread には、他のスレッド (あるいは自分自身でもよい --- 普通は pthread_exit しますが) の実行を終了するための手段としてキャンセルが用意されています。 キャンセルは pthread_cancel() 関数を呼び出すことによって 要求することができます。 この関数を呼び出すと、引数で指定されたスレッドに対してキャンセルを要求します。 pthread_cancel() 関数自体は次のようなシンプルな関数なので、 取り消したいスレッドの ID さえ分かれば苦もなく呼び出せます。 int pthread_cancel(pthread_t thread); なお、pthread_cancel() 関数は、対象スレッドに対してキャンセルの要求を出すと、 そのスレッドが終了したかどうかとは無関係に、すぐに戻ってきます。 もし、そのスレッドが確実に終了するま

  • pthread_t のポインタが示すもの(pthread_create 第一引数/pthread_self戻り値) « 余談ですが……

    実装依存なので注意。今回の話は Linux (glibc) についてです。 pthread_create 第一引数や、pthread_self戻り値で使用される pthread_t 型であるがその値の意味について考えたことは無かった。 pthread_t 型をマニュアルなどを確認すると「スレッドの識別子」と記載されているが、システムコール(gettid)の返す値とは異なり、無意味な値だと考えていた。ところが、前回の調査を行なった結果、あるところのポインタ値であることが分かった。 まず、pthread_t の値(ポインタ値)を確認しみる。値自体は gdb で “info threads” としたときにも出力されます。 (gdb) info threads 2 Thread 0xb7fedb90 (LWP 8398) 0xb7fff424 in __kernel_vsyscall () *

  • ustackOnLinux - ログを取っている環境が i386だったり x86_64だったりするので、stackframeの addressの出方もまちまちだったりするが、

    お品書き PyukiWiki perl Games mac Java Technical memo links 更新履歴 2014-09-10 Windowsメモ 2013-05-07 linuxメモ 2012-06-12 AIXメモ 2012-01-05 links 2011-12-27 FrontPage 2011-12-07 OpenGrok 2010-11-15 LinuxSGDriver 2010-04-24 DTrace perl 2010-04-13 HP-UXメモ 自己満足 全部: 3 今日: 1 いま: 1 目次 動機 First Step 2nd Step 3rd Step 4th Step 参考文献 参考文献からのメモ 残課題 ログを取っている環境が i386だったり x86_64だったりするので、stackframeの addressの出方もまちまちだったりするが、

  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

    iww
    iww 2010/09/18
    MISRA-Cルールだと配列の初期化は先頭を書かないとNGになる。まあMISRAなんてもともとうんこだけど
  • 安藤のためのC言語テスティングフレームワークCUnit

    安藤のためのC言語テスティングフレームワークCUnit 『CUnit for Mr.Ando』は CppUnit-x をベースにしたC言語テスティングフレームワークです。 これは、C言語のソースコードを単体テストのために供給します。 "CUnit for Mr.Ando" is CppUnit-x based C langage testing framework for Mr.Ando. It provide the C source code for unit testing. イントロダクション Introduction. JUnit は非常に強力なJava単体テストツールです。 しかしながら、多くのC言語技術者はJava言語を理解することができません。 JUnit is a very powerful Java simple unit test tool. However, man

  • yunoの雑記帳 - gcc/warning

    gcc4.1の、-Wallで有効にならない警告オプションのメモ。 概要だけなので、適宜マニュアルを参照した方がいいです。 -Wformat-y2k strftimeで2桁の年を出力する書式を警告する。 -Wformat-nonliteral 引数にva_listを取る書式化関数を除き、書式文字列が文字列リテラルでないためチェックできない場合に警告する。 -Wformat-security セキュリティ上の問題の可能性がある書式化関数の使用法について警告する。 現在、printfとscanf関数で書式文字列が文字列リテラルでなく書式引数がない、例えば`printf(foo);'のような場合に警告する。 -Winit-self それ自身を使って初期化している未初期化変数について警告する。 例えば以下のようなコードを警告する。 int i = i; -Wmissing-include-dirs

  • gcc の -Wall 以外の警告オプション - ひげぽん OSとか作っちゃうかMona-

    以前同僚の光成さんが、以下の warning オプションを使っていると書かれていたのが気になったので調べてみました。 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith もし上記以外にも良さげなオプションがありましたら教えてください<(_ _)> 情報源 man と info と http://sugarpot.sakura.ne.jp/yuno/?gcc%2Fwarning 。 最初は日語版の man だけを見ていたのですが、id:kazuhooku に info を見るべしと教わりました。 man も info もそうですが、日語版は情報が少なかったりするので注意。 LANG=C man gccなどとしましょう。 -Wforma

    gcc の -Wall 以外の警告オプション - ひげぽん OSとか作っちゃうかMona-
  • Manpage of CTAGS日本語対応版

    Section: Exuberant Ctags (1) Updated: Version 5.5.3j1 Index Return to Main Contents 名前 ctags - ソースコードに対するタグファイルを生成する。 書式 ctags [options] [file(s)] etags [options] [file(s)] 説明 ctags および etags (以後、区別が必要なければ ctags) は、 さまざまなプログラミング言語で定義されているオブジェクト (関数やクラス、構 造体など) のインデックス (または "tag") ファイルを生成する。このタグファイ ルによって、テキストエディタやその他ユーティリティで (ソースコードを閲覧す る際に) 、オブジェクトの定義位置を迅速に、しかも簡単に見つけることが可能に なる。"tag" は、インデックスのエントリか

  • 定義済みマクロ - redstrange Wiki*

    標準規格 C言語 __DATE__ ソースのコンパイル日付 __FILE__ ソースのファイル名 __func__ 関数名(Visual Studio.NET以降では、__FUNCTION__) __LINE__ 行番号 __STDC__ 標準Cに従っている際に定義されている(ifdefで使う) __STDC_HOSTED__ 整数1 __STDC_IEC_559__ IEC60559浮動小数点仕様に従っている際に定義されている __STDC_IEC_559_COMPLEX__ IEC60559互換の複素数仕様に従っている際に定義されている __STDC_ISO_10646__ ?→http://seclan.dll.jp/c99d/c99d02.htm#dt19990412 __STDC_VERSION__ C言語のバージョン __TIME__ ソースのコンパイル時刻 __TIMESTA

    定義済みマクロ - redstrange Wiki*
  • Codian - ポインタと文字列とCStringと

    更新日: 2007/11/19 動作確認環境:Windows XP Professional SP2, Visual C++ 6.0 Professional SP6 サンプルプロジェクト(Visual C++ 6.0): MxA09_VC6.zip サンプルプロジェクト(Visual C++ 6.0用、サンプルプログラム13のみ): MxA09_Unicode_VC6.zip 最後は文字列についてです。 MFCにはとても便利なCStringクラスがありますが、それをどう使えばいいのか、やや遠回り気味に説明したいと思います。 ちなみに文字列やポインタについては、Codianの「ポインタ」でも解説していますのでそちらもどうぞ。 C/C++言語の文字列型 なんてものは存在しません!! Visual Basic他、多くの言語は簡単に文字列を操作できる「文字列型」を持っていますが、C/C++言語に

    iww
    iww 2010/06/15
    恋しさとせつなさと心強さと
  • アップルはなぜ Objective-C にこだわるのか

    [若き日の Steve Jobs] Flash をめぐる紛争についてたいへん刺激的な論考がある。 steve’s blog: “The Genius in Apple’s Vertical Platform” by Steve Cheney: 14 April 2010 *     *     * 戦略的理由 今週アップルはデベロッパを特定の開発ツール XCode に閉じ込めた。これはアドビの Flash を潰すためだと多くのひとは考えた。たしかに戦術的にはそうだ。しかしもっと大きな戦略的理由があるのだ。アップルは XCode ツールに移行するようデベロッパを促すことにより、アーキテクチャを変更する準備を整えているのだ。 This week Apple confined developers to a specific set of tools (XCode). A lot of peop

    アップルはなぜ Objective-C にこだわるのか