読者です 読者をやめる 読者になる 読者になる

とても邪悪な解き方

Cクイズ こっちわからん>< - So Many People, So Many Different Ideas

/* MyTypeの定義 */
void set(MyType m, int val);
void inc(MyType m);
void print(MyType m);
int main(void)
{
MyType m;
set(m, 0); /* mを0にセット */
inc(m); /* mをインクリメント */
print(m); /* 1と表示される */
return 0;
}
/* 各関数の実装 */
このmain関数が、コメントにある期待通り動くようにMyTypeを定義し、各関数を実装することができるか?
もちろん、mainの中身は変えないこと。そして、使えるのは、C言語の言語要素のみ。

ぱっと思いついたもの。

/* MyTypeの定義 */
typedef int MyType;
void set(MyType m, int val);
void inc(MyType m);
void print(MyType m);
int main(void)
{
MyType m;
set(m, 0); /* mを0にセット */
inc(m); /* mをインクリメント */
print(m); /* 1と表示される */
return 0;
}

void set(MyType m, int val)
{
	*((int*)(&m + 0x08)) = val; // スタックよこんにちは(アドレスは環境依存
}
void inc(MyType m)
{
	(*((int*)(&m + 0x08)))++; // スタックよこんにちは(アドレスは環境依存
}
void print(MyType m)
{
	printf("%d\n",m); // えええええええ
}

gcc 4.2.1で確認、とかそんなアホなことはない。
とっさにこういうのを思いつくのはイクナイ!!

     *      *
  * この答えはうそです +  
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *

マジレスするとtypedef int MyType[1];かな。