私は、すべてのバイトがカウントされる 8051 のプロジェクトに取り組んでいます。そのため、通常は使用しないいくつかのグローバル変数を使用しています。ポインターを関数に渡す通常の方法では、ここでオーバーヘッドが大きくなりすぎます。
通常の戻り値に加えて、関数の結果を通知するために単一ビット変数 ( Cのコンパイラ固有の拡張機能) を使用する関数がいくつかあります。
bit global_error_flag = 0;
bit global_data_ready_flag = 0;
unsigned char A_Function (void) {
// Do some stuff
if ( badness ) {
global_error_flag = 0;
global_data_ready_flag = 1;
return 0;
}
if ( data_is_ready_use ) {
global_data_ready_flag = 1;
}
return a_value;
}
void Other_Function (void) {
unsigned char c;
c = A_Function();
if( global_error_flag) {
// Do error stuff here.
}
else
if( global_data_ready_flag ) {
// Do data processing here.
}
global_error_flag = 0;
global_data_ready_flag = 0;
}
テクニックが悪かったので、コードをより明確にする方法はありますか?
どの関数呼び出しにこれらのフラグを設定する副作用があるかをどのように示すべきですか? コメントは十分ですか?API を示すために関数に名前を付ける必要がありますか (準ハンガリー式)? そのような呼び出しをマークするためにマクロを使用する必要があります:
#define FUNCTION_SETS_FLAGS(code) (code)
FUNCTION_SETS_FLAGS( c = A_Function() );
他のアイデアはありますか?