2011-07-13 6 views
2
#include <stdio.h> 

char char1;  /* first character */ 
char char2;  /* second character */ 
char char3;  /* third character */ 

main() 
{ 

    char1 = 'A'; 
    char2 = 'B'; 
    char3 = 'C'; 
    (void)printf("%c%c%c reversed is %c%c%c\n", 
     char1, char2, char3, 
     char3, char2, char1); 
    return (0); 
} 

なぜprintf関数でvoidを使用するのですか? printf関数でvoidを使用するとは何ですか?voidをprintf関数で使用する理由

+0

あなたはコンテキストおよびコンパイラを与えることができますか?たとえば、void *をいくつかの場合*をスタックのコメントに使うことができます。これはいくつかの夢中の組み込みプログラミングか、Linux向けのGCCですか? – Mikhail

答えて

9

printfはほとんどの人がほとんど使用しない値を返します。いくつかのツール(例えば 'lint')ではこの未使用の戻り値が警告されます。この警告を抑制する一般的な方法は、(void)キャストを追加することです。

これは実行の点で何もしません。戻り値を無視しても問題ないことをあなたのツールに伝える方法です。

+0

lintがなぜ 'char1 = 'A''行で警告しないのだろうと思います。結局のところ、代入は式そのものなので、lintを操作するには '(void)(char1 = 'A');'が必要です。 – Vlad

+0

Lintは言語仕様のすべての可能なアプリケーションをカバーしようとしていませんが、一般的な(伝統的な)バグ原因に注意を向けようとしています。すべてのエラー情報を戻り値で伝えなければならない例外がない言語では、少なくとも無視するものについて考える必要があります。 –

+0

はい。しかし、バグの伝統的なソースである 'printf'の結果を無視していますか?私の意見では、指定された文のlintは、実際のパラメータと一致する書式文字列(与えられた行の定数となることがあるかどうか)をチェックするだけです。 – Vlad

2

非常に古いようです。Cコードです。

printfの前にキャストされた(void)は、printfの戻り値を無視していることを示すために使用されます。それは必要はありません。

0

printfの戻り値が無視されていることをコードを読んでいる人に思い出させるのは、コーダーの努力です。何らかの技術的理由で必要ではありません。

1

(void)foo()は、foo(この場合は - printf)の呼び出しの戻り値を無視することを意味します。

コンパイラと警告レベルの設定によって、戻り値を無視すると警告が表示されます。コンパイラの「警告をエラーとして処理する」オプションを使用してコードをコンパイルするには、呼び出される関数の戻り値をこの場合のように使用するか、明示的に無視する必要があります。

設定が非常に厳しい場合にのみ、これは通常の設定では必要ありません。

0

これは、Printfの戻り値を何も出力しない型です。これは、コンパイラの警告を取り除くために使用することができます。または、コードの読者が、戻り値が決して使用されないことを知っていることを単に知ることができます。

-1

main()

データ型は?あなたはデータの種類を選択し必要

int main() { 
    return 0 
} 

printfが無効funcionですが...

コードを正しく:

#include <stdio.h> 

char char1;  /* first character */ 
char char2;  /* second character */ 
char char3;  /* third character */ 

int main() { 
    char1 = 'A'; 
    char2 = 'B'; 
    char3 = 'C'; 
    printf("%c%c%c reversed is %c%c%c\n", 
    char1, char2, char3, 
    char3, char2, char1); 
    return 0; 
} 
+0

'printf'は実際に' int'を返します。 –

関連する問題