掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26598

,コンマ演算子にて未定義動作を起こす方法
投稿者---RiSK(2006/04/11 16:14:59)


# >関係者様
# このスレッドで有益な情報が得られたときに
# 内容を編集・転載・引用したいと考えています。
# 勝手ながら,スレッドに書き込んだ時点で編集・転載・引用の許可を
# 得たものとさせていただきます。
# だめなら「だめ!」と言っていただければそうしますので,
# スレッドへの書き込み自体はご自由にどうぞ。

どのようにコンマ演算子で未定義動作を起こすのでしょうか?
規格によると

コンマ演算子の結果を変更するか,または次の副作用完了点の後でそれにアクセスしようとした場合,その動作は未定義とする。

JISX3010:2003 6.5.17 コンマ演算子
となっていますが,
1.「結果を変更する」とはどういう意味でしょうか?
 どのように「結果を変更する」のでしょうか?
2.どのように「次の副作用完了点の後でそれにアクセスしようと」するのでしょうか?

なお,
int a = 0; ++a, printf("%d\n", a++); が妥当だということ,
int a = 0; printf("%d %d\n", ++a, a++); が未定義動作だということ,
コンマ演算子とコンマ区切り子の区別
は理解しています。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:,コンマ演算子にて未定義動作を起こす方法 26602 かずま 2006/04/11 17:39:38


No.26602

Re:,コンマ演算子にて未定義動作を起こす方法
投稿者---かずま(2006/04/11 17:39:38)


> コンマ演算子の結果を変更するか,または次の副作用完了点の後でそれに
> アクセスしようとした場合,その動作は未定義とする。

規格書の脚注には「コンマ演算子は, 左辺値を返さない。」とありますが、
それを別の表現として本文中に書いたつもりなのではないでしょうか。

gcc は、次のプログラムに対して警告を出しますが、エラーにはしません。

「a, b」というコンマ演算子の結果を 5 ではなく、b として扱っていると解釈
できます。これは C++ と同じ解釈です。
#include <stdio.h>

int main(void)
{
    int a = 3, b = 5;
    (a, b) = 7;            // コンマ演算子の結果を変更しようとしている
    printf("b = %d\n", b); // コンマ演算子の結果にアクセスしている
    return 0;
}



この投稿にコメントする

削除パスワード

No.26605

Re:,コンマ演算子にて未定義動作を起こす方法
投稿者---RiSK(2006/04/11 23:00:40)


>規格書の脚注には「コンマ演算子は, 左辺値を返さない。」とありますが、
>それを別の表現として本文中に書いたつもりなのではないでしょうか。

なるほどー。

脚注は私も読んでいましたが,
「左辺値」→「左のオペランド」と
勝手に脳内変換していました。(^^;;

となると,

>gcc は、次のプログラムに対して警告を出しますが、エラーにはしません。

このgccの振る舞いは「左辺値を返さない」ではないようですね。
代入できるということは左辺値を返していることになりますから。

実験したところ,
VC, bccでは「左のオペランドが左辺値じゃないぜ」とエラーにしてくれました。
dmc は黙ってコンパイルしちゃいました...

VC,bcc は「左辺値を返さない」実装で,
gcc, dmc は「未定義の動作」を実装していると解釈したいと思います。

なんか,規格書の書き方が曖昧なんじゃないかなぁ...
でも,「左辺値を返さない」実装も「未定義の動作」として
正しいと言えるわけか。うーん。なるほどね。

以上で解決としたいと思います。ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧