次のプログラムでは、4 行目の include ステートメントが追加されている (コメント解除されている) 場合、コンパイラの警告が発生します。
コンパイラ: gcc バージョン 8.1.0 (i686-win32-dwarf-rev0、MinGW-W64 プロジェクトによってビルド)
#define __STDC_FORMAT_MACROS
// Adding this and -Wall results in compiler warning
//#include "stdio.h"
#include <cstdint>
#include <cinttypes>
#include <cstdio>
int main()
{
int64_t i = 0;
printf("%" PRId64, i);
}
警告は次のとおりです。
testlld.cpp:11:14: warning: unknown conversion type character 'l' in format [-Wformat=]
std::printf("%" PRId64, i);
^
testlld.cpp:11:14: warning: too many arguments for format [-Wformat-extra-args]
testlld.cpp:11:14: warning: unknown conversion type character 'l' in format [-Wformat=]
testlld.cpp:11:14: warning: too many arguments for format [-Wformat-extra-args]
誰かが何が起こるか説明できますか?
もちろん、<cstdio> のみを使用することでこれを修正できます。これは、この場合は正しいことです。
しかし、それは別の質問につながります...
C コンパイラでコンパイルされたものと C++ コンパイラでコンパイルされたものの 2 つの実装ファイルに含まれるヘッダー ファイルがあるとします。ヘッダー ファイルは C コンパイラでコンパイルする必要があるため、「stdio.h」を使用する必要があります。これは、そのヘッダー ファイルを含むすべてのコードは、C++ コードであっても、"stdio.h" を使用し、<cstdio> を使用する必要がないことを意味しますか?