トップ
«前の日記(2007-05-24)
最新
次の日記(2007-05-28)»
追記
設定
AOISAKURA - 日記 [登録]
日記の更新
日記本文
年
月
日
タイトル:
本文(
tDiary
スタイル/
書き方
):
[C/C++] __typeofと__typeof__、__attributeと__attribute__ <p>5月頭にgtk_input_dialogのソースを読んでいる時に、gtk+の他のコードを読んでたら、gtkaliasdef.cで以下のような記述に出会った。</p> <pre> extern __typeof (gtk_show_about_dialog) gtk_show_about_dialog \ __attribute((alias("IA__gtk_show_about_dialog"), visibility("default"))); </pre> <p>ここで気になったのが__typeofと__attribute、これって何なんやろ。</p> <p>__typeofはそのモノズバリだと引っかからなくて、typeofで調べると色々出てきた、変数の型を調べるためのgccの拡張機能(<a href="http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html">gcc some extensions</a>)。__attribute__(こっちはあっさり)は関数に属性を設定するもの(<a href="http://www.cqpub.co.jp/Interface/column/freesoft/2003/200303/3.htm">フリーソフトウェア徹底活用講座 - C言語におけるGCCの拡張機能(2)</a>)とのこと。</p> <p>んじゃ、typeofと__typeofと__typeof__って何が違うの?このうち、typeofと__typeof__はGCCのマニュアルに出てくる、それに対して__typeofは出てこない。というわけで、__typeofは推奨されていない書き方なのかなぁと推測できなくも無い。</p> <p>次に、__attributeと__attribute__の違いは何ね?webでさらっと検索したところ、変数と関数に指定するときでそれぞれ指定できる属性が違ってくることは知った(フリーソフトウェア徹底活用講座<a href="http://www.cqpub.co.jp/INTERFACE/column/freesoft/2003/200304/0.htm">C言語におけるGCCの拡張機能(3)</a>と<a href="http://www.cqpub.co.jp/INTERFACE/column/freesoft/2003/200303/0.htm">C言語におけるGCCの拡張機能(2)</a>)、けど二つの違いはよくわからず。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/27398">[ruby-dev:27398] Re: warning: 'cdecl' attribute directive ignored</a>を読むと、記述される場所によってエラーになるかどうかの違いはあるみたいだ。</p> <p>とりあえずどっちも記述のされ方が違うだけで実務上たいした違いは無さそうなので読む上ではもう気にしないことにしよう。</p> [gtk] alias("IA__gtk_show_about_dialog") <p>上のエントリの__attributeの中身に出てくるalias("IA__gtk_show_about_dialog")について、頭に"IA_"ってついているのは、gtk+-2.6のパフォーマンス改善の一環だそうだ。</p> <blockquote> * To reduce code size and improve efficiency, GTK+, when compiled <br> with the GNU toolchain, has separate internal and external entry <br> points for exported functions. The internal names, which begin with <br> IA__, may be seen when debugging a GTK+ program.<br> <cite><a href="http://hpux.connect.org.uk/hppd/hpux/Gtk/Development/gtk+2-2.10.12/readme.html">gtk+2-2.10.12 README</a></cite> </blockquote>
カテゴリ: |
keyboard
|
media
|
process
|
book
|
firefox
|
life
|
server
|
game
|
movie
|
更新情報を送る
この日の日記を隠す
絵日記(追加)
本日のツッコミ