
今日会社で
変数 = (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#
-
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
構造体のメンバをfor文で回したい
C言語・C++・C#
-
-
4
戻り値について
C言語・C++・C#
-
5
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
6
0xffffとは?
C言語・C++・C#
-
7
メモリをアドレスを直接指定して値を取得するには
C言語・C++・C#
-
8
2の補数を計算するプログラム
C言語・C++・C#
-
9
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
10
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
11
構造体のデータを丸ごとコピーしたい
C言語・C++・C#
-
12
(void)0 はどんな意味ですか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
【gcc・cygwin】multiple defin...
-
TimerProc コールバック関数を...
-
多重定義が起きている?--lnk20...
-
(void)0 はどんな意味ですか
-
C++ 静的クラスの役割が分からない
-
C++でオーバーロードに関するバ...
-
[Visual C++ 6.0] コンパイル(...
-
int main()、void main()、void...
-
C#を勉強中でC#で壁紙を変更す...
-
C# Controls.Addで動的に配置し...
-
[VC++]ヘッダファイルからの関...
-
C言語プログラムについて
-
Enterキーを押されたら次の処理...
-
Aの値からBの値を除するとは??
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
戻り値を返す関数の前に(void)...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
C# Controls.Addで動的に配置し...
-
C#でテンキーの操作は可能でし...
-
int main()、void main()、void...
-
C# KeyDownイベントでショート...
-
gcc: incompatible pointer type
-
Notepad++の関数リスト表示の変...
-
(void)0 はどんな意味ですか
-
VC++でGetKeyboardStateがうま...
-
関数ポインタについて
-
void main()って誰が最初?:AN...
-
演算子のオーバーロードでコン...
-
この式の意味
おすすめ情報