我正在开发一个 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() );
还有其他想法吗?