プロが教える店舗&オフィスのセキュリティ対策術

今日会社で

変数 = (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に定義されいるものとする

A 回答 (4件)

「戻り値を明示しないときに(void)を付けて使用する」



昨今では、あまり流行のスタイルではないと思いますが、
こういうコーディング規約の文化は、実際にありました。
lint(ソースのチェックツール)等で、(void)にキャストしていないと警告をあげるものもありました。
「冗長な記述」と見る向きも、「表明的な記述」と見る向きもあります。

> 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか??

動作的には、戻り値を(void)にキャストしてるのですね。
だから「明示的に『使わない』という表明」してるという意図です。
# 何も書いてないと、ミスで戻り値をチェックしてないのか、
# 分かった上でチェックの必要がないのか分かりにくい、と考えます。

Sum = (void)PlusPoint;
とはいえ、こういう書き方はしない(できない)です。
コンパイル通らないでしょう?

あくまで、例えばこんな感じで使います。
(void)PlusPoint(1, 2);
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/18 13:20

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


が, さすがに
(void)(a = b);
なんてのは見たことないなぁ.
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/18 13:27

これは・・・


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

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

お礼日時:2007/03/18 13:22

補足というか、おまけに近いですが……



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

それで、コンパイラに対して、「わかっていてチェックしていない」と主張するのがこのパターンです。
(void)printf("hello world\n");
というもあり。(でも、これはさすがにうっとうしいという意見が強いでしょう)
    • good
    • 0
この回答へのお礼

「わかっていてチェックしない」

と言う意味なんですか??
初耳です!!

お礼日時:2007/03/18 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング