依赖于日志记录相关功能的日志记录结构如下所示:
typedef struct
{
TFkt_vlogf vlogf;
TFkt_outf outf;
void* logData;
} TLogger;
在此日志记录功能中,有一个抽象的logData,根据记录器的作业分配不同的指针。
Filelogger会在某一时刻访问存储的文件句柄。
FILE * fileHandle = (FILE *)(logger->logData);
虽然这个编译SPLint对此不满意并抱怨这条消息:
转换为基础抽象类型FILE *
:(FILE *)(logger->logData)
我可以做些什么来满足SPLint?
/*@abstract@*/
,但没有帮助C90中是否有更好的方法来存储和访问数据,同时仍然保持结构签名能够独立于其实现传递类型?
答案 0 :(得分:0)
更好的解决方案是使用联合并在该联合中包含所有可能的数据。
typedef union
{
FILE * fileHandle;
char something;
long int other;
} TLog_data;
typedef struct
{
TFkt_vlogf vlogf;
TFkt_outf outf;
TLog_data logData;
} TLogger;
在执行期间的某个时刻,您将使用:
((TLogger*) logger)->logData.fileHandle