【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


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

No.20942

初歩的な質問ですみません。
投稿者---mayu(2005/05/05 12:23:25)


char型へのポインタを返す関数例えばstrcpyなどは

strcpy(st1, st2);

のような形で使われたりする時
戻り値であるchar型へのポインタを返しているのに受け取る変数が
書かれていません。

st3 = strcpy(st1, st2);

のように受け取る変数(char型へのポインタ変数)st3を書かないでもエラーにならないのは何故なんでしょうか・・・?
受け取る変数がない場合はvoid型にキャストでもされるんでしょうか・・。





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:初歩的な質問ですみません。 20943 とおりすがり 2005/05/05 13:43:50


No.20943

Re:初歩的な質問ですみません。
投稿者---とおりすがり(2005/05/05 13:43:50)


>のように受け取る変数(char型へのポインタ変数)st3を書かないでもエラーにならないのは何故なんでしょうか・・・?
>受け取る変数がない場合はvoid型にキャストでもされるんでしょうか・・。

言語仕様上の扱いは識者におまかせして、比較的簡単な説明を。
C言語では値を返す関数は"式"です。
式だからこそ、mayuさんが示すように代入式の右辺にも使えますし、
  if (func() != 0) {
    …
  }

などのように使用することができます。
(返り値がvoid型の関数だと式ではないので、できません)

ここで例えば、ただの"1"という定数値も全く同じ"式"です。
なので、C言語の文法要素としては、両者の扱いは同じになります。
さて、式に";"をつけると"文"になります。なので、以下は全て正当な文です。
  1;
  a = 1; // "a = 1"自体も式
  func();
  strcpy(st1, st2);
  printf("%d", i); // printfも値を返す

(以前の)C言語チェックツールでは、関数の返り値を使用していない箇所も
チェックされてしまうと言ったことがあり、そういうツールを使っていた頃の
プログラムでは、
  (void)func();

と明示的にvoidへcastして、チェックを回避しているコードを見ることもあります。
http://www.st.rim.or.jp/~phinloda/cqa/cqa16.html
の【lint】の項目とか、少し参考になります。


この投稿にコメントする

削除パスワード

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