1

次のプログラムでは、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> を使用する必要がないことを意味しますか?

4

2 に答える 2