私は最近、プロジェクトを GCC から clang に移植していました (その中で、いくつかの C GNU 主義を修正しました)。これは私に考えさせました: どのような C GNU-isms (標準化されていない GCC でサポートされている C 言語の拡張) が存在するのでしょうか? 包括的なリストはどこかにありますか?
3 に答える
8
これは、GCC の Web サイトからの非常に包括的なリストです。かなりたくさんあるようですので、ふるいにかけて頑張ってください!
http://gcc.gnu.org/onlinedocs/gcc-4.2.0/gcc/C-Extensions.html
于 2010-01-30T08:22:19.863 に答える
0
私が見つけた最も優れたGNUismの1つは、構造体を埋める際の明示的なキー宣言でした。
struct canmsg_t {
short flags;
int cob;
canmsg_id_t id;
unsigned long timestamp;
unsigned int length;
unsigned char data[CAN_MSG_LENGTH];
};
canmsg_t msg =
{
["flags"] = 0x00;
["cob"] = 0;
["id"] = 0x534;
["timestamp"] = 0;
["length"] = 1;
["data"] = { 0 };
}
これにより、メンバーをスキップしたり並べ替えたりすることはできません。そうするとエラーがスローされますが、100以上の要素構造では、これは非常に貴重になります。
于 2010-02-01T09:20:29.907 に答える
0
多くの拡張機能があり、それについてはベータ版の回答に任せますが、プロジェクトがそれらの多くに依存しているとは考えにくいです。GNU ビルドで拡張機能を無効にすることは可能です。これを行うだけで、コード ベースに潜在的な非互換性があることを事前に警告できます。
GCC はほとんどの C99 機能をサポートしているのに、一部の一般的なコンパイラはサポートしていない (具体的には Microsoft VC++) など、他の問題が発生する場合があります。そのため、コード ベースをテストするときに C99 機能も無効にすることができます。
于 2010-01-30T09:32:23.907 に答える