• ベストアンサー

戻り値を返す関数の前に(void)を付ける

今日会社で 変数 = (void)戻り値のある関数 #具体的な例としては下記一例を参照 と、ソースで書かれているものがあったのですが、 コメント等では、 「戻り値を明示しないときに(void)を付けて使用する」 と、書いてあります。 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか?? または、このような動作にはならないのでしょうか。 自分自身、ソースの内容をうる覚えになっておりますので、 確認をしながらアップしていきたいと思いますので、 宜しくお願い致します。 /*一例*/ ・num1とnum2を足した値を返す int PlusPoint(int num1 , num2); ・PlusPointの値を格納する int Sum ◇ソース◆ #include <stdio.h> #include "Plus.h" int main(void) { int Sum; Sum = (void)PlusPoint; if(Sum == 2) { printf("false"); exit(0); } printf("true"); return 0; } *PlusPoint関数は外部で定義されている *プロトタイプ宣言はPlus.hに定義されいるものとする

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

「戻り値を明示しないときに(void)を付けて使用する」 昨今では、あまり流行のスタイルではないと思いますが、 こういうコーディング規約の文化は、実際にありました。 lint(ソースのチェックツール)等で、(void)にキャストしていないと警告をあげるものもありました。 「冗長な記述」と見る向きも、「表明的な記述」と見る向きもあります。 > 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか?? 動作的には、戻り値を(void)にキャストしてるのですね。 だから「明示的に『使わない』という表明」してるという意図です。 # 何も書いてないと、ミスで戻り値をチェックしてないのか、 # 分かった上でチェックの必要がないのか分かりにくい、と考えます。 Sum = (void)PlusPoint; とはいえ、こういう書き方はしない(できない)です。 コンパイル通らないでしょう? あくまで、例えばこんな感じで使います。 (void)PlusPoint(1, 2);

KGM
質問者

お礼

返信が遅くなってすいません。 今のプロジェクトではこんなコーディングルールがあって、 自分でも知らないことだったので、驚きでした。 これ参考になりました。ありがとうございます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

「関数の返り値を使わない (= 副作用のみを期待する)」ことを明示している (#1&#2 の通り) ということで, しょぼいコンパイラだと void にキャストした方が最適化が強くかかる可能性はあります. が, さすがに (void)(a = b); なんてのは見たことないなぁ.

KGM
質問者

お礼

ご丁寧なアドバイスを頂ありがとうございます!! コーディングルールなので、、、なんともいえません。

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.3

これは・・・ コーディング規約か何かなのでしょうか? はっきり言って会社でソース管理していくべき物なのであれば 可読性のない、もしくは理解し難いコーディングはやめるべきです。 私の部下にこういうコーディングする人間がいたら、絶対書き直させますねw

KGM
質問者

お礼

某N社のあるプロジェクトのコーディングルールです^^ 自分は、ここから抜けることになりましたが・・・・

回答No.2

補足というか、おまけに近いですが…… Cでは、「返値の型が明示されていない関数の返値は int 」なので、おおよその標準関数は int を返します。 例えば、printf() も putchar() も strcat() も 返値があります。 こういう関数は、実際に使う場合に返値をチェックしないことが多いですよね。 コンパイラは、「返値が定義されているけれど、普通は誰も返値を使わない」のか、「意味のある返値が定義されているけど、チェックし忘れ」なのか理解できません。 それで、コンパイラに対して、「わかっていてチェックしていない」と主張するのがこのパターンです。 (void)printf("hello world\n"); というもあり。(でも、これはさすがにうっとうしいという意見が強いでしょう)

KGM
質問者

お礼

「わかっていてチェックしない」 と言う意味なんですか?? 初耳です!!