雑記
試してガッテン
最終更新:
匿名ユーザー
-
view
C/C++の関数の引数の評価順位って、規格にあるんだろうか。。
たとえば
int a; a = 5;
なんてやっちゃって、
int MAX(int i, int j) { return ((i > j) ? i : j); }
という関数を
MAX(--a, ++a);
とコールしたら、どうなるんだろう??
そんなことが気になると試して見なければ気がすまない私(笑)
さっそく、Cygwinからviで書いて、コンパイル。
答えは6。ということは、どうもGCCでは右から評価されるみたい。
答えは6。ということは、どうもGCCでは右から評価されるみたい。
納得はできる。C/C++では引数は右からスタックに積まれるから、評価の順も右からということか。
でもこれって、処理系依存っぽいなあ。
あとあと。
typedef struct { int a; int b; } T_HOGE;
なんて構造体を切る。
んで、
int main(void) { T_HOGE hoge; T_HOGE* pHoge = &hoge; ・・・
こんな感じで使うと、T_HOGE構造体のメンバアクセスは
(*pHoge).a = 10; pHoge->a = 10;
の2通りで行える事が判明。(実は、これはきっとできるだろうと思っていたけど)確認はまたまたGCCでやりました。
まあしかし、誰もこんな変態的な使いかたしないだろうけど。