回答編集履歴

3 解説リンクを追加

SHOMI

SHOMI score 4004

2019/07/14 19:48  投稿

> まず、アドレスの表示について、手元の参考書ではこのプログラムと同じく『%p』を用いているのですが、なぜうまくいかないのでしょうか。
%pはvoidポインタの値を表示する書式指定のため、```-Wall```を付けたことでポインタの型が違うと警告されています。
> 二つ目に、関数msort内の作業用配列についてエラーメッセージが出ていますが、ここでの宣言は可変長配列なのでしょうか。
n1、n2は定数だと思います。(これらをNにするとエラーメッセージは消えました)
n1、n2はint変数です。
オプションに```-std=c99```か```-std=c11```をつければ可変長配列を使用できます。
> 最後に『‘i’ に関する演算は定義されていません』というエラーメッセージがありますが、これについては全くわかりません。
```C
     X1[i] = X[i++];
     X2[i] = X[i++];
```
iとi++どちらが先に評価されるか不定です。
iとi++どちらが先に評価されるか不定です。
以下に解説があります。
[EXP30-C. 副作用が発生する式の評価順序に依存しない](https://www.jpcert.or.jp/sc-rules/c-exp30-c.html)
2 可変長配列について追記

SHOMI

SHOMI score 4004

2019/07/14 19:41  投稿

> まず、アドレスの表示について、手元の参考書ではこのプログラムと同じく『%p』を用いているのですが、なぜうまくいかないのでしょうか。
%pはvoidポインタの値を表示する書式指定のため、-Wallを付けたことでポインタの型が違うと警告されています。
%pはvoidポインタの値を表示する書式指定のため、```-Wall```を付けたことでポインタの型が違うと警告されています。
> 二つ目に、関数msort内の作業用配列についてエラーメッセージが出ていますが、ここでの宣言は可変長配列なのでしょうか。
n1、n2は定数だと思います。(これらをNにするとエラーメッセージは消えました)
n1、n2はint変数です。
オプションに```-std=c99```か```-std=c11```をつければ可変長配列を使用できます。  
> 最後に『‘i’ に関する演算は定義されていません』というエラーメッセージがありますが、これについては全くわかりません。
```C
     X1[i] = X[i++];
     X2[i] = X[i++];
```
iとi++どちらが先に評価されるか不定です。
1 コード追加

SHOMI

SHOMI score 4004

2019/07/14 19:28  投稿

> まず、アドレスの表示について、手元の参考書ではこのプログラムと同じく『%p』を用いているのですが、なぜうまくいかないのでしょうか。
%pはvoidポインタの値を表示する書式指定のため、-Wallを付けたことでポインタの型が違うと警告されています。
> 二つ目に、関数msort内の作業用配列についてエラーメッセージが出ていますが、ここでの宣言は可変長配列なのでしょうか。
n1、n2は定数だと思います。(これらをNにするとエラーメッセージは消えました)
n1、n2はint変数です。
> 最後に『‘i’ に関する演算は定義されていません』というエラーメッセージがありますが、これについては全くわかりません。
```C
     X1[i] = X[i++];
     X2[i] = X[i++];  
```
iとi++どちらが先に評価されるか不定です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る