LinuxからOS/Xに移植するのは難しいです。私はインライン関数を別の関数本体の中に埋め込んでいます。 Linuxでは、gccはコードをうまくコンパイルしましたが、OS/Xではclangがエラーを報告します。ここでclangの問題:Cの別の関数本体の中のインライン関数
は、コードスニペットであるLinuxの
$ cat inline.c
void func() {
inline int max(int a, int b) { return (a>b) ? a : b; }
int c = max(11,22);
}
、すべてが
Linux $ gcc -c inline.c
Linux $$ gcc --version
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
しかし、OS/X上の打ち鳴らすには文句を言い、
OSX $ cc -c inline.c
inline.c:2:38: error: function definition is not allowed here
inline int max(int a, int b) { return (a>b) ? a : b; }
^
inline.c:3:17: warning: implicit declaration of function 'max' is invalid in C99
[-Wimplicit-function-declaration]
int c = max(11,22);
^
1 warning and 1 error generated.
OSX $ cc --version
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
は、このAは、大丈夫ですgcc "feature"またはこの機能を有効にするclangフラグがありますか?
実際のコードでその関数の 'max'を何回呼び出しますか? – user3386109
はい、GCCの機能です。 [ネストされた関数](https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions)は標準ではありません。C. Clangはオブジェクトを処理する権限を持っています。あなたのコードをポータブルにするには、しないでください。 –
ここで「インライン」とは全く意味がありません。関数定義をいくつかの.cファイルに表示されるようなヘッダーファイルに配置する場合は、貴重なツールです。同じ.cファイルの中にあるものは、予告なしにコンパイラによってインライン化される可能性があります。ここでは単に余計です。 –