
今日会社で
変数 = (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に定義されいるものとする
No.1ベストアンサー
- 回答日時:
「戻り値を明示しないときに(void)を付けて使用する」
昨今では、あまり流行のスタイルではないと思いますが、
こういうコーディング規約の文化は、実際にありました。
lint(ソースのチェックツール)等で、(void)にキャストしていないと警告をあげるものもありました。
「冗長な記述」と見る向きも、「表明的な記述」と見る向きもあります。
> 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか??
動作的には、戻り値を(void)にキャストしてるのですね。
だから「明示的に『使わない』という表明」してるという意図です。
# 何も書いてないと、ミスで戻り値をチェックしてないのか、
# 分かった上でチェックの必要がないのか分かりにくい、と考えます。
Sum = (void)PlusPoint;
とはいえ、こういう書き方はしない(できない)です。
コンパイル通らないでしょう?
あくまで、例えばこんな感じで使います。
(void)PlusPoint(1, 2);
返信が遅くなってすいません。
今のプロジェクトではこんなコーディングルールがあって、
自分でも知らないことだったので、驚きでした。
これ参考になりました。ありがとうございます。
No.4
- 回答日時:
「関数の返り値を使わない (= 副作用のみを期待する)」ことを明示している (#1 の通り) ということで, しょぼいコンパイラだと void にキャストした方が最適化が強くかかる可能性はあります.
が, さすがに
(void)(a = b);
なんてのは見たことないなぁ.

No.2
- 回答日時:
補足というか、おまけに近いですが……
Cでは、「返値の型が明示されていない関数の返値は int 」なので、おおよその標準関数は int を返します。
例えば、printf() も putchar() も strcat() も 返値があります。
こういう関数は、実際に使う場合に返値をチェックしないことが多いですよね。
コンパイラは、「返値が定義されているけれど、普通は誰も返値を使わない」のか、「意味のある返値が定義されているけど、チェックし忘れ」なのか理解できません。
それで、コンパイラに対して、「わかっていてチェックしていない」と主張するのがこのパターンです。
(void)printf("hello world\n");
というもあり。(でも、これはさすがにうっとうしいという意見が強いでしょう)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
Excelのオートシェイプで2箇所折れ曲がった矢印
Excel(エクセル)
-
配列を含む構造体の初期値について
C言語・C++・C#
-
-
4
戻り値について
C言語・C++・C#
-
5
2の補数を計算するプログラム
C言語・C++・C#
-
6
#defineが使用するメモリ領域について
C言語・C++・C#
-
7
メモリをアドレスを直接指定して値を取得するには
C言語・C++・C#
-
8
(void)0 はどんな意味ですか
C言語・C++・C#
-
9
コンパイルエラーについて
C言語・C++・C#
-
10
0xffffとは?
C言語・C++・C#
-
11
C言語初心者の質問失礼します。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
ドラッグしたときにマウスカー...
-
C#でトーンカーブの作成
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
プログラムでの数字につく”f”の...
-
C言語で複数列のデータを1列の...
-
c言語で、繰り返し文の中で、0....
-
sscanfとscanfの違いがよくわか...
-
量化子の入れ子について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
pictureboxの画像を削除するには?
-
Notepad++の関数リスト表示の変...
-
C#でテンキーの操作は可能でし...
-
アドレスを指定して関数を呼び...
-
ウインドウの移動禁止
-
画面上をクリックするとクリッ...
-
C# Controls.Addで動的に配置し...
-
別ソースファイル、同クラス名...
-
DLLの関数呼び出しで引数がある...
-
プログラム作成教えてください...
おすすめ情報