1

次のようなコードを読みました。

#define __printf__(a,b) __attribute__((format(printf,a,b,)))

stand を理解するために__printf__は、attribute が何をするのかを理解する必要があります。

これを理解するのを手伝ってくれる人はいますか? >

どうもありがとう

4

1 に答える 1

1

フォーマット(アーキタイプ、文字列インデックス、最初にチェック)

format属性は、関数がprintf、scanf、strftime、またはstrfmonスタイルの引数を取ることを指定します。これらの引数は、フォーマット文字列に対して型チェックする必要があります。たとえば、宣言:

         extern int
         my_printf (void *my_object, const char *my_format, ...)
               __attribute__ ((format (printf, 2, 3)));
    

コンパイラにmy_printfの呼び出しの引数をチェックさせ、printfスタイルのフォーマット文字列引数my​​_formatとの整合性を確認します。

基本的には、コンパイル時に指定されたフォーマットタイプに対して可能な文字列を検証するためのコンパイラへの注意です。引用符で囲まれた行では、printf形式の文字列をprintf形式の文字列に対して検証するようにコンパイラーに指示しています(たとえば、%sパラメーターにintが渡された場合、コンパイラーはユーザーに通知する必要があります)。

詳細については、ドキュメントでフォーマットを検索してください。

于 2012-11-08T05:10:16.687 に答える