0

依赖于日志相关函数的日志结构如下所示:

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 中是否有更好的方法来存储和访问数据,同时仍然保持结构签名以独立于其实现来传递类型?

4

1 回答 1

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
于 2012-12-06T10:47:29.727 回答