2

2つの異なるコンパイラで実行しているプログラムがあり、各コンパイラには異なるファイル処理ライブラリがあります。たとえば、ライブラリでは次のものが必要です。

fwrite(buffer,size,elements,file)

もう1つは:

f_write(file,buffer,size,elements)

とにかく、コンパイラ間でシームレスに移行できるステートメント#define内のメインヘッダーファイルでグローバルを使用できますか?#ifdef

4

2 に答える 2

7

もちろん:

#ifdef STUPID_COMPILER
# define fwrite(ptr, size, nitems, stream) f_write(stream, ptr, size, nitems)
#endif

次にfwrite()、コードで使用するだけです。ラッパー関数は必要ありません。f_write()それを必要とするコンパイラ/ライブラリを使用している場合、プリプロセッサはそれを呼び出しに変換します。

于 2013-03-02T18:15:50.103 に答える
2

新しい関数を作成できます。

size_t my_fwrite(...)
{
#ifdef REAL_FWRITE
    return fwrite(buffer,size,elements,file);
#elif  F_WRITE
    return f_write(file,buffer,size,elements);
#else
    #error "No fwrite"      
#endif
}

どのような実装が提供されていませんが、提供されていfwriteますf_writeか?

于 2013-03-02T18:12:43.333 に答える