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 に答える