タグ

2014年7月23日のブックマーク (9件)

  • 分割の定石

    第1項:変数の共有 第2項:extern宣言 第3項:ヘッダーファイルの重複防ぎ [1]変数の共有 前節では、最低限の構成でプログラムを複数ファイルに分割しました。 しかし、共有できたのは関数だけであり、変数の共有は行いませんでした。 複数のソースファイルに分けて開発を行う場合は、 関数だけでなく、変数や定数なども共有する必要が生じてきますが、 前章の方法では、変数を共有することは出来ません。 例えば、次のようにヘッダーファイル内で変数を宣言すると、 宣言が重複している、という意味のエラーが表示され、コンパイル出来ません。 /* sum.h */ int sum(int min,int max); int Public; このエラーをより正確に理解するには、宣言の意味を理解する必要があります。 これまで、関数にしろ変数にしろ、宣言する、と表現してきましたが、 実は、宣言に

    dynamicsoar
    dynamicsoar 2014/07/23
    わかりやすいー
  • C言語の正しいヘッダファイルの書き方 - saito’s blog

    最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの書き方が分かっていないと思われる箇所が多々見られました。 実際、C言語の入門書でもヘッダファイルの書き方を詳しく説明しているものは、僕の知っている限りでは存在しないので、C言語を使っていてもヘッダファイルの正しい書き方を知らない人が少なくないのではないかと思われます。 そこで、このエントリでは、C言語のヘッダファイルの書き方について、僕が知っているテクニックをまとめてみました。 インクルードガードを書く ヘッダファイルファイルで他のヘッダファイルをインクルードしていると、いつの間にか同じヘッダファイルを2回インクルードしてしまうことがあります。 例

    C言語の正しいヘッダファイルの書き方 - saito’s blog
    dynamicsoar
    dynamicsoar 2014/07/23
    なるほどー。まさに詰まってたあたりがまとまってた。すごくありがたい。
  • ポインタ虎の巻~多次元配列の実現

    面白いことに、p == *p である。これはポインタが指す対象が配列でありポインタではないから、間接参照が生成されないのである(逆に言えばポインタの場合には、*p が間接参照をして、p != *p になる)。 上の表の結果と、二次元配列のシンボル x は、実質上一次元配列であることから、次のキャストは成功することになる。 int *p = (int *)x; だから次のように書ける。 int x[10][10]; int i; int *p = (int *)x; for( i = 0; i < 100; i++ ) { *p++ = i; } printf( "x[5][5] = %d\n", x[5][5] ); これは x が実質上一次元のポインタであることを示している。 この事情は関数引数の場合も同様である。二次元配列とポインタは混同されず、しかし int (*p)[10] とは一

  • SConsをちょっと便利なMakeとして使ってみる - 跡々

    makeでちょっと複雑なことをやろうとすると結構しんどくなってきたので、SConsを試してみることにした。 まだ全然使いこなせてないが、とりあえずmakeでできることをSConsではどのようにやるのかのメモ。 単純な例 次のようなMakefileを考えてみる。 all: piyo.txt hoge.txt: echo "This is $@" > $@ fuga.txt: echo "This is $@" > $@ piyo.txt: hoge.txt fuga.txt cat $+ > $@ SConsではSConstructというファイルが、makeにおけるMakefileに相当する。SConstructはPythonのスクリプトである。 上記のMakefileと同様の動きをするSConstructは以下のように書ける。 Command("hoge.txt", None, 'echo

    SConsをちょっと便利なMakeとして使ってみる - 跡々
  • SCons: A software construction tool

    What is SCons? SCons is an Open Source software construction tool. Think of SCons as an improved, cross-platform substitute for the classic Make utility with integrated functionality similar to autoconf/automake and compiler caches such as ccache. In short, SCons is an easier, more reliable and faster way to build software. What makes SCons better? Configuration files are Python scripts--use the p

    dynamicsoar
    dynamicsoar 2014/07/23
    makeの改良版みたいなものか。Fortranをデフォルトでサポートってのがいい。とてもいい。でもPython必須か。FAQによると2014-07現在はPython2のみで3は未対応、だがNewsには次からは3にするわってある…うーむ
  • コンパイルするファイル間の依存性はできるだけ減らそう 〜liboctaveへん〜 - akihiko’s tech note

    liboctave 利用時のコンパイルを「遅い」と感じたことはないだろうか.ここでは liboctave におけるヘッダファイルの依存関係を把握することにより,コンパイルを高速化する方法を検討する. Scott Meyers (スコット・メイヤーズ): Effective C++ (吉川訳, アスキー出版局, 1998) が指摘しているように,コンパイルするファイル間の依存性はできるだけ減らした方がいい(34項).特に liboctave のように大きなライブラリになると,コンパイル速度が顕著に違って来る. liboctave 利用時のコンパイルを高速化するために,ヘッダファイルの依存関係を把握しよう. liboctave の場合, octave/config.h と octave/Matrix.h をインクルードしておけば,大概の機能を利用できるようになる. SVD (特異値分解) とか

    コンパイルするファイル間の依存性はできるだけ減らそう 〜liboctaveへん〜 - akihiko’s tech note
  • Makefileの書き方に関する備忘録 - minus9d's diary

    ※この記事は続き記事になっています 第1回:この記事 第2回:Makefileの書き方に関する備忘録 その2 - minus9d's diary 第3回:Makefileの書き方に関する備忘録 その3 - minus9d's diary 第4回:Makefileの書き方に関する備忘録 その4 - minus9d's diary makeの使い方を復習しました。今更makeかよと思われそうですが、曖昧に覚えているところも多く、よい勉強になりました。参照したテキストは、オライリーがオープンブックとして公開しているManaging Projects with GNU Make, Third Edition(GNU Make 第三版)。今回の記事はほぼ全部これが出典です。 最初の一歩 makefileに以下の内容を書いて保存。コマンドラインでmakeと単に打つと、このmakefileが実行対象とな

    Makefileの書き方に関する備忘録 - minus9d's diary
  • untitled

  • Makefileの(おそらく正しい)書き方講座 | youtalk.jp

    LinuxMacを使っていて,C++Texのコンパイルをするときにいちいち直接g++やplatexコマンドでコンパイルするのは効率が良いとはいけません.C++はリンクするライブラリを長ったらしく記述しなくてはいけないし,Texは2回コンパイルしなくては図表番号の索引が出来ないなどの煩わしい作業が伴うからです. そこで,コンパイルの手順を記したMakefileを書こうという話になります.しかし,Makefileの記述方法は一歩間違うと,あまり作業が楽にはなりません.ファイル間の依存関係をいちいち直接記述しなくてはいけないからです.私の研究室の友達,後輩もこのMakefileの記述方法に四苦八苦しています. この問題を解決する私なりのMakefileの一例を以下に示してみます. ポイントは,g++の-MM -MGオプションと,Makefileの中でlsを呼ぶことで,ディレクトリ内の関連ファ