タグ

Programmingとgccに関するtztのブックマーク (10)

  • 可変個数引数マクロの作り方 - tshinoの日記

    GCCのプリプロセッサの便利な拡張を知ったのでメモ。 関数形式マクロの引数の数は固定、というのはよく知られていると思うけど、現在のC言語(C99)ではサポートされている。 // (1) #define DEBUG_PRINT(...) printf(__VA_ARGS__)C++の仕様には入っていないけど、まあGCCではC++でも使えている。 ただ、__VA_ARGS__ はすこし凝ったことをするには限界があることを最近知った。例えば、この DEBUG_PRINT() の表示に関数名を追加したいとする。 // (2) #define DEBUG_PRINT(fmt, ...) \ printf("%s(): "fmt, __func__, __VA_ARGS__)__func__ は関数名の文字列を指す特別な識別子で、これもC99。マクロに似ているけどマクロではないので、__FILE__や

    可変個数引数マクロの作り方 - tshinoの日記
  • GCC開発者らがGoogleの「Go言語」をサポートする方針を発表 | OSDN Magazine

    GNU Compiler Collection(GCC)を監督するGCC Steering Committeeは1月26日、米Googleの「Go」をサポートする方針を発表した。早ければ「GCC 4.5」でマージされるという。 Goは、Googleが2009年11月に発表したオープンソースのプログラミング言語。Pythonのような動的言語の開発スピードと、CやC++のようなコンパイル言語の性能を併せ持つことを目的とする。 GCCは今後、gccgoフロントエンドとgccランタイムの貢献を受け付けマージを進める。メンテナーはGoogleのIan Taylor氏。サポートはGCC 4.5以降となり、GCCリリースマネージャがコンパイラにマージする時期などを決定する。 GCCは現在、C、C++、Objective-C、Fortran、Java、Adaをサポートしており、最新版は1月21日リリースし

    GCC開発者らがGoogleの「Go言語」をサポートする方針を発表 | OSDN Magazine
  • ハードウェアを意識したプログラミングの基礎(後編)

    前編では,デバイス・ドライバを理解するために必要なエンディアンやI/Oアクセス,ハードウェアとソフトウェアの境界について説明した.後編では,アクセス時のアラインメントについて説明した後,実際のコードを示しながらLinuxデバイス・ドライバの例を紹介する.  (編集部) 1.アクセスは境界に沿って エンディアン,I/Oアクセス,ハードウェアの次に問題になるのが,アクセス時のアラインメントです.CPUによってはアラインメントが合っていないアクセスが起こるとエラーになったり,意図しないデータが読めたりします.最後に紹介していますが,実は,知らないと一番見つけづらいところかもしれません. まず,「アラインメントが合っていないアクセス」が,どういうものかを定義しましょう. ここでは,「アクセスしようとしているアドレス値をアクセス幅で割ったときに,余りが出るようなアクセス」を「アラインメントが合ってい

    tzt
    tzt 2010/02/13
    アライメントに合わせてアクセスしなきゃいけないCPUでも__attribute__((__packed__))つけるとgccが良しなにコードを生成してくれる。遅いだろうけど。
  • GNU リンカ LD の使い方

    この文書では GNU リンカ ld バージョン 2.11 を説明する. 文書は,GNU Free Documentation License の条項の下で配布されている. このライセンスの写しは,"GNU Free Documentation License" という セクションに記載されている. 翻訳についての問い合わせは `yabuki at sra.co.jp' まで。

  • 本家のマニュアル GCC online documentation

    Latest releases These are manuals for the latest full releases. GCC 14.2 manuals: GCC 14.2 Manual (also in PDF or PostScript or an HTML tarball) GCC 14.2 GNU Fortran Manual (also in PDF or PostScript or an HTML tarball) GCC 14.2 CPP Manual (also in PDF or PostScript or an HTML tarball) GCC 14.2 GNAT Reference Manual (also in PDF or PostScript or an HTML tarball) GCC 14.2 GNAT User's Guide (also in

  • 猫科研究所 - gcc option

    MinGW上で頻繁にgccを利用しているくせにすぐに忘れるのでメモ。-D,-I,-i,-L,-l等の一般的で分かり切ってるものは書かない。随時追加。 なお、正確にはGCCのオンラインマニュアルが存在するのでそちらを参照すべき。オプションの一覧(リンク先は4.5.xのもの)もある。だが、あまりに膨大すぎるのでこの記事では「よく使用するが意味を忘れがちなオプション」に関してのメモとする。 -f(no-)strict-aliasing 厳密な別名規約(aliasing rule)に則っているとみなすか、則っていないとみなすか。intの変数に対してshort*でアクセスするような行儀の悪いコードが無いと宣言できるなら-fstrict-aliasingにする。 #include <stdio.h> int main(int argc, char* argv[]){ int x = 0; short*

    tzt
    tzt 2010/02/05
    「-Wstrict-aliasing=2とすれば曖昧なケースも警告」
  • ホワット・ア・ワンダフル・ワールド strict aliasing rule

    来週からは後期スタートだというのに,生活ペースはメチャクチャ.昨日は 17 時に起きてしまい,今日は 22 時半ごろに起きてしまった今日この頃,皆様いかがお過ごしでしたでしょうか ? まぁ,順調に 6 時間ずつズレているので,明日には元に戻るかなと. しっかし,なんで夜型の方には一瞬で 6 時間とか 12 時間とか平気でズレるのに,朝方の方には意識しないと絶対にズレないんでしょうかね ? まぁ,朝の 3 時とかにバリバリ活動しているってのは,ある意味朝型と言えなくもないような (ことはない). 僕は夜はあんまり生産的な方面にやる気が出ない人なので,夜型になると研究がさっぱり進まないと言う.いろいろ危機です. あと,Debian にテキトーなパッケージをいっぱい突っ込んでいたら,何故か日語の TTF (フォント) が表示されなくなってしまいました.そんなこんなで今はビットマップな生活なんで

  • type punning と strict aliasing - memologue

    /.JのGCC-3.4リリースの話題を追っていたら、GCC3では-O2で-fstrict-aliasingが有効だから注意せよというポスト(http://slashdot.jp/comments.pl?sid=175355&cid=537217)があった。 strict aliasing については、Radium Software Developmentさんが詳しい。これは気にしておいたほうがよさそうだ。GCCの -fstrict-aliasing の説明は次。 コンパイルされている言語に適用可能な別名規則(aliasing rule)のうち最も厳密なものをコンパイラが前提することを許します。これによって、 C(およびC++)では式の型に基く最適化を動作させることになります。例えば、ある型のオブジェクトが別の型のオブジェクトと同一アドレスに位置することは、それら2つの型がほとんど同一でない

    type punning と strict aliasing - memologue
  • OBB vs AABB - Radium Software Development

    This domain may be for sale!

  • RAIIもどき in C __attribute__((cleanup(fn)))

    gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです。 void Baz::boo() const { boost::mutex::scoped_lock lock(mutex); // ... return; // lock変数のデストラクタで自動開放。手動での開放不要 }でもC言語だと、当然ながら手動で開放しないといけません。複数箇所でreturnしている場合など、タイプが面倒臭すぎ。 int foo() { pthread_mutex_lock(&mutex); // ... if (hogehoge) { pthread_mutex_unlock

    RAIIもどき in C __attribute__((cleanup(fn)))
  • 1