2

Android NDKでネストされた関数を使用する方法はありますか?NDKはgccを使用しているので、それは可能であるはずですよね?

main内で関数を定義しようとしましたが、コンパイラはそれを認識しません。これがエラーです

エラー:入力の最後に「{」トークンエラー:予期される「}」の前に関数定義を指定することはできません

4

4 に答える 4

1

正確にはわかりません。armしかし、NDKがgccコンパイラを使用し、ネストされた関数がARMアーキテクチャで壊れている可能性がある限り、ネストされた関数はNDKツールセットで無効になっている可能性があります。いずれにせよ、ネストされた関数はGCC拡張機能であるため、コードを移植可能にする場合は、gcc拡張機能をまったく使用せず、代わりにC89/C90互換コードを使用することをお勧めします。

于 2012-05-15T05:49:45.073 に答える
1

ここからの入れ子関数の例では、afoo()にが含まれsquare()、コンパイルされて正常に実行されます(Tegra 3上で)。私はNDKr8androidツールチェーンを使用しています(android-cmakeを使用すると、違いが生じる場合はそうではありません)。たぶん、古いバージョンを使用する場合は、r8を試してみるべきですか?

于 2012-05-16T13:38:37.087 に答える
0

はい、可能です。gcc呼び出しに-fnested-functionsフラグを追加する必要がある場合があります。

于 2012-05-14T06:03:18.980 に答える
0

ネストされた関数には実行可能スタックが必要ですが、Androidではデフォルトで無効になっています。

それを理解するのに信じられないほどの時間がかかりました-しかし、あなたはあなたのCFLAGSに以下を追加する必要があります:

-z execstack -Wa、--execstack

ではごきげんよう!

于 2014-10-14T23:13:30.950 に答える