17

Google で簡単に検索しても何も見つからなかったので、ここで質問してみます (gcc/clang に関係する多くの人がここにたむろしているので) - __STDC_LIB_EXT1__gcc/clang のステータスは? 私たちはクロスプラットフォームアプリケーションを開発しており、(Visual Studio 2017 で奇跡的に利用できる) 安全な境界チェック機能のいくつかを使用したかった<stdio.h>のですが、Xcode 9.2 でコードをコンパイルできませんでした。Xcodeが使用するclangのバージョンは古いかもしれないと思いましたが、Ubuntuのgcc 6.3.0は同じように動作します。次のサンプルでtmpnam_sを使用しようとしています。

#if defined(__STDC_LIB_EXT1__)
#define  __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#else
#error "__STDC_LIB_EXT1__ not defined"
#endif

int main(int argc, char** argv)
{
    char t[L_tmpnam_s]; 
    tmpnam_s(t, L_tmpnam_s);
    return 0;
}

しかし、マクロが定義されていないため、コンパイルは失敗します。

gcc -std=c11 test.c
test.c:5:2: error: #error "__STDC_LIB_EXT1__ not defined"
#error "__STDC_LIB_EXT1__ not defined"
^~~~~

何か間違ったことをしているのですか、それともこの関数セットのサポートが不十分なのでしょうか?

4

1 に答える 1