私はGNU core utilsのコードを使って作業していますが、void usage()関数は属性 "noreturn"で明示的に設定されています。さて、私は関数を変更しています。戻りたい(exit()への呼び出しを削除しました)。コンパイラはまだ "noreturn"関数が返ってくると不平を言って、Eclipse CDTデバッガを使用するときは、コードを実行するのは変則的です - 私はコードの行をスキップします。関数が.cファイルに設定されていないと、この.cファイルの.hファイルがありません。gccで関数の属性が設定されている(設定解除する方法)
ファイルはdf.cです。私はファイルdf_call.cの名前を変更しました。コンパイラはどのようにこの属性を見つけることができますか?どうすれば解除できますか?
ありがとうございました。
======= すべての貢献者のおかげで助けになりました! GNUutils 7.4で見つかったusage()関数は、system.hでプロトタイプ化されています( )。void usage(int status)ATTRIBUTE_NORETURN 'void use(int status);/ATTRIBUTE_NORETURN; /'が解決されました。私にとっての問題が、変更system.hの問題を残し
長い答えは:GNU Cコンパイラは、関数 に属性を割り当てるサポート(http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.htmlを参照してください) 「noreturn」である1構文。 "属性((noreturn))" (http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntaxを参照) ですが、ATTRIBUTE_NORETURNにはマクロであることがよくあります。属性が設定されている場合、この場合は1つ は関数から復帰しようとしますが、実行可能ファイルはcomplaintでコンパイルされますが、 がコンパイルされ実行されます。しかし、予期しない動作をします(私の場合 のsrc行をスキップします。おそらく最適化のためです)。 Eclipse CDTのデバッガは実際には 行のコードを飛び越え、開発者は自分の感覚を疑うようになります。
__noreturn__(またはATTRIBUTE_NORETURN、私はGoogle Codeearchで見つけることができるcoreutilsのバージョンでtypedefされている)のためのソースを覗いてみましたか? –
Er、それは '__noreturn__'、すごいマークダウンでなければなりません。 –
そのディレクトリの 'usage'に" grep "を実行することをお勧めします:) –