パラメーターが計算されるときに関数を実行する古い厄介な方法があることに気付きましたが、それが何と呼ばれているのかわからないため、ルールを検索できません。
例
char dstr[20];
printf("a dynamic string %s\n", (prep_dstr(dstr),dstr));
アイデアは、「()」が prep_dstr 関数を実行した後にアドレス dstr を返すというものです。
私はそれが醜いことを知っており、以前はラインでそれを行うことができました-しかし、それは複雑です...
#わかりました-それをしないようにという嘆願への答えです。
私は実際にいくつかの既存のコードでMISRAクリーンアップを行っています(私のものではありません)、現在、「prep_dstr」関数はバッファを取り(バッファの長さに関係なく)それを変更し、渡されたポインタを返しますパラメータ。
私は小さな一歩を踏み出すのが好きです-テストしてから、別の小さな一歩を踏み出します。
したがって、永続性についての手がかりなしでポインターを返すよりも少し厄介なアプローチは、ポインターを返す関数を停止し、コンマ演算子を使用することです (バッファーの末尾から外れないように確認した後)。
これでMISRAエラーのカウントダウンが始まります。すべてがまだ機能し、MISRAエラーがなくなったら、エレガンスに近づこうとします-おそらく再来年:)