Android NDKでネストされた関数を使用する方法はありますか?NDKはgccを使用しているので、それは可能であるはずですよね?
main内で関数を定義しようとしましたが、コンパイラはそれを認識しません。これがエラーです
エラー:入力の最後に「{」トークンエラー:予期される「}」の前に関数定義を指定することはできません
Android NDKでネストされた関数を使用する方法はありますか?NDKはgccを使用しているので、それは可能であるはずですよね?
main内で関数を定義しようとしましたが、コンパイラはそれを認識しません。これがエラーです
エラー:入力の最後に「{」トークンエラー:予期される「}」の前に関数定義を指定することはできません
正確にはわかりません。arm
しかし、NDKがgccコンパイラを使用し、ネストされた関数がARMアーキテクチャで壊れている可能性がある限り、ネストされた関数はNDKツールセットで無効になっている可能性があります。いずれにせよ、ネストされた関数はGCC拡張機能であるため、コードを移植可能にする場合は、gcc拡張機能をまったく使用せず、代わりにC89/C90互換コードを使用することをお勧めします。
ここからの入れ子関数の例では、afoo()
にが含まれsquare()
、コンパイルされて正常に実行されます(Tegra 3上で)。私はNDKr8androidツールチェーンを使用しています(android-cmakeを使用すると、違いが生じる場合はそうではありません)。たぶん、古いバージョンを使用する場合は、r8を試してみるべきですか?
はい、可能です。gcc呼び出しに-fnested-functionsフラグを追加する必要がある場合があります。
ネストされた関数には実行可能スタックが必要ですが、Androidではデフォルトで無効になっています。
それを理解するのに信じられないほどの時間がかかりました-しかし、あなたはあなたのCFLAGSに以下を追加する必要があります:
-z execstack -Wa、--execstack
ではごきげんよう!