4

inlcude_next がたまたま C プリプロセッサの GNU 拡張であることは知っています。MSVC を使用して Gnu ライブラリ コードをコンパイルする際に問題が発生しています。たとえば、stdio.h ヘッダー ファイルなどがありますGNU-like <stdio.h>。MSコンパイラを使用してコンパイルすると、Windows用のディレクティブのinvalid preprocessor command 'include_next'ようなものがないため、どちらが適切かがわかります。#include_next#include_next を実行する主な目的は、プロジェクトに stdio.h というファイルを作成し、それをデフォルトのヘッダーの代わりにインクルードすることです。

そこで、2 つのオプションを試しました。1)// #include_next <stdio.h>すべてのファイルでこの行をコメントアウトします。2) または #include_next を に置き換え#include <stdio.h>ます。

1)を選択すると問題が発生するかどうかはわかりません(最後にリンカーエラーが発生します)。2)については、fatal error C1014: too many include files : depth = 1024どちらでも良いと思います。このwrapper #ifndefために、インクルード ガードまたは# pragma onceディレクティブを使用します。

以下は私の懸念事項です:

ヘッダー ファイル stdio.h のように#include <stdio>、またはヘッダー ファイル内にステートメントを記述する必要がありますか? #include "stdio.h"Windows用にコンパイルするときに意味がありますか。必要なすべてのソース ファイルで直接実行するだけで十分ではない#include "stdio.h"ので、Visual C 標準ヘッダーをバイパスして、代わりに私のものを使用しますか? また、include_next ステートメントを完全に省略した場合、何が起こる可能性がありますか?

私の主な目的は、MSVC を使用して gnu ライブラリを正常にコンパイルすることです。何か不足している場合は修正してください。または、このトピックにさらに光を当ててください。

4

1 に答える 1