2

GCC と Visual Studio#ifdefのキーワードが使用可能かどうかを確認するために、 のセットを探しています。__restrictコンパイラのバージョンを確認する必要があると思いますが、どのバージョンで導入されたのかわかりません。私を助けてくれる人はいますか?

更新: これは、C89 としてコンパイルするときに動作する必要があります (動作する必要があるだけです)。__STDC_VERSION__したがって、C99 または C99 のサポートを示すことに頼ることはできません。

4

4 に答える 4

1

'configure、make、make install'シナリオでは、これは'configure'でチェックする必要があります。「configure」は、config.hで「HAS_RESTRICT」を定義する必要があります。これをヘッダーでチェックして、適切なマクロを定義する必要があります。

Visual Studioの場合、私にはまったく考えがありません。

于 2011-05-10T09:08:01.477 に答える
1

C99標準のキーワードを使用するだけrestrictで、おそらく#defineそれを他の何かに使用できます。

たとえば、次のように C99 への準拠をテストできます。

#if __STDC__ != 1
#    error not conforming
#    define restrict __restrict /* use implementation __ format */
#else
#    ifndef __STDC_VERSION__
#        error not conforming
#        define restrict __restrict /* use implementation __ format */
#    else
#        if __STDC_VERSION__ < 199901L
#            error Compiler for C before C99
#            define restrict __restrict /* use implementation __ format */
#        else
#            /* all ok */
#        endif
#    endif
#endif

int fx(int *restrict a, char *restrict b) {
  *b = *a;
  return 0;
}

int main(void) {
  int a[1];
  char b[1];
  fx(a, b);
  return 0;
}

もちろん、#errorは作業バージョンで編集する必要があります

于 2011-05-10T09:05:40.367 に答える
0

私見、__restrict両方の C/C++ プログラムのすべての標準コンパイラで利用できるはずです。ある意味で似ていC99 restrictます。

于 2011-05-10T09:05:09.563 に答える