「試してガッテン」(2006/01/28 (土) 02:25:18) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
C/C++の関数の引数の評価順位って、規格にあるんだろうか。。
たとえば
int a;
a = 5;
なんてやっちゃって、
int MAX(int i, int j)
{
return ((i > j) ? i : j);
}
という関数を
MAX(--a, ++a);
とコールしたら、どうなるんだろう??
そんなことが気になると試して見なければ気がすまない私(笑)
さっそく、Cygwinからviで書いて、コンパイル。
答えは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でやりました。
まあしかし、誰もこんな変態的な使いかたしないだろうけど。
C/C++の関数の引数の評価順位って、規格にあるんだろうか。。
たとえば
int a;
a = 5;
なんてやっちゃって、
int MAX(int i, int j)
{
return ((i > j) ? i : j);
}
という関数を
MAX(--a, ++a);
とコールしたら、どうなるんだろう??
そんなことが気になると試して見なければ気がすまない私(笑)
さっそく、Cygwinからviで書いて、コンパイル。
答えは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でやりました。
まあしかし、誰もこんな変態的な使いかたしないだろうけど。
表示オプション
横に並べて表示:
変化行の前後のみ表示: