C99で書かれたライブラリを呼び出す必要のあるコードをC++で書いています。このライブラリは、関数パラメータにstatic
キーワードを指定したC99形式の配列宣言を使用します。など、すなわち、:私のC++のプロジェクトでこのライブラリのヘッダを含むとき-pedantic
フラグを使用している場合C99スタイルの配列関数のシグネチャを使って関数を呼び出す方法
void my_func(int n, int my_ints[static n]);
しかし、コンパイラ(打ち鳴らす)が警告をスロー:
は何> g++ -pedantic -c my_code.cpp
In file included from my_code.cpp:
./my_c_lib.h: warning: variable length arrays are a C99 feature [-Wvla-extension]
void my_func(int n, int my_ints[static n]);
この場合、Cライブラリを呼び出す正しい/最善の方法は? vla-extension
警告をオフにするだけでなく、ライブラリのヘッダーを書き換えたり、中間のCラッパーを記述したりすることはありませんか?
最小限の作業例:
extern "C" {
void my_func(int n, int my_ints[static n]);
}
int main()
{
int* some_ints = new int[10];
my_func(10, some_ints);
delete[] some_ints;
return 0;
}
'-pedantic'フラグを使ってコンパイルする必要がありますか?それは、あなたがANSI標準を忠実に固守するように設計されていることを示すフラグです。すでに厳密に厳格な '-ANSI'フラグだけです。 C99機能を使用することにより、標準を踏襲するようにコーディングすることはありません。 –
@JoeTyman私は移植性を確保する手段としてペディティック・フラグを使用していますが、それはトップにあるかもしれません。 VLAは明らかにC99の機能であり、 'g ++'はそれを正しく警告します。したがって、私の質問です。ライブラリ自体は 'gcc -c -std = c99 -pedantic'を使ってコンパイルされます。この場合、VLAはうまくいくはずですか? –
あなたは先月16歳になり、4年前に置き換えられた標準でうまくいくと思います(実際にどのプラットフォームをプログラミングしているのか分かりません)。あなたが本当にその極端な移植性を心配しているのであれば、C99 VLAを標準のものに取り替える必要があります。 –