エラーを無視することはできません1。警告は無視することしかできません。コードを変更します。
printf("\\x%02x", ((unsigned char *)code)[i]);
ドキュメントやコードの元の作成者からの入力がなければ、コードが実際に何をすべきかについて確固たる証拠がないため、これは推測にすぎません。ただし、上記の修正は非常にもっともらしく、単純なタイプミス (元の作成者は a を忘れていました\
) であり、エラーを黙って無視する C コンパイラを作成者が使用していると考えられます (Python は設計上同じ動作をします)。
上記のコード行、またはそれとほぼ同じコード行は、おそらく世界中の何万ものソース ファイルに含まれています。これは、エスケープ シーケンスを使用してバイナリ blob をエンコードするために使用されるため、C プログラムにリテラルとして埋め込むことができます。同様のコードが JSON、XML、および HTML エミッターに表示されます。たぶん百回は書いた。
あるいは、コードが文字を出力することになっていた場合、これは機能しません。
printf("\x%02x", ((unsigned char *)code)[i]);
これは機能しません。エスケープ シーケンス ( などで始まるもの\
)\x42
は C コンパイラによって処理されますが、フォーマット文字列 ( などで始まるもの%
)%02x
は によって処理されprintf
ます。上記のコード行は、順序が逆の場合にのみ機能する可能性があります。つまり、プログラムをコンパイルする前にprintf
最初に実行した場合です。いいえ、うまくいきません。
著者が文字通りの文字を書くことを意図していた場合、次のほうがより妥当です。
printf("%c", ((unsigned char *)code)[i]); // clumsy
putchar((unsigned char *)code)[i]); // simpler
したがって、元の作成者が単にタイプミスして 1 つを忘れた\
(私はいつもその間違いを犯します) か、作成者が手がかりがないかのいずれかを知っています。
ノート:
1 : エラーは、GCC がコードが何をすべきかを認識していないことを意味するため、続行することはできません。