次のC言語のプログラムは不適切である。その理由として最も適切なものはどれか。ただし、プログラム中の左端の数字は行番号であり、プログラムには含まれない。19行目には注釈に示すようなプログラム部分
(そこには不適切な内容は含まれないとする) があるが、その詳細はここでは省略した。
1 #include <stdio.h>
2
3 struct intpair {
4 int m, n;
5 };
6
7 struct intpair *f(int m, int n) {
8 struct intpair t;
9 t.m = m;
10 t.n = n;
11 return &t;
12 }
13
14 int main (void) {
15 struct intpair *p, *q;
16 p = f(1, 2);
17 q = f(3, 4);
18 printf("%d, %d, %d, %d\n", p->m, p->n, q->m, q->n);
19 /* ここに p と q を用いた計算を行うプログラム部分がある。*/
20 return ();
21 }
@ 構造体 intpair の定義の最後 (5行目) に、余計な ; がついている。
A 関数 f の仮引数名と構造体intpairのメンバ名が、重複 (ともにm と n) している。
B 9行目及び10行目の代入の左辺が、それぞれ t->m、t->n になっていない。
C 関数 f が局所変数へのポインタを返している。
D 18行目の printf の書式が誤っている。
C
@ 構造体の定義にも ; が必要である。
A 仮引数名と構造体のメンバ名が同一でも構わない。
B -> を使用するのは -> の左側の変数がポインタの場合であり、intpair t; として定義されているため適切である。
C 正しい。局所変数 (ローカル変数) t のアドレスを関数の値として返すのはおかしく、C言語のプログラムは不適切である。
D 構造体メンバの m, n は整数型であり、正しい構文である。
目次 | W−2 |