Clang sqlite3浮动错误

时间:2014-01-10 02:07:34

标签: c sqlite clang

有关如何追踪此错误的任何想法都将不胜感激。

我有一些在两个或多个进程中运行的c代码。第一个进程侦听消息队列并将生成的结构保存到数据库。其余进程查询一个或多个串行设备,并通过消息队列将此信息传递给第一个进程以存储在数据库中。

除了以下内容外,一切都很好。我使用的其中一个结构包含一个浮点数。此结构通过队列发送并正确解码,但是当使用sqlite3_bind_double()绑定值时,数据库中的结果值为0.在sqlite3_bind_double()语句周围放置printf()语句会导致代码工作并放置正确的值在数据库中。

但更有意思的是,如果删除printf()语句并使用gcc编译程序,代码就可以工作。

任何帮助都会很棒。提前谢谢。

代码:

int
add_inverter_stat(sqlite3 *db_conn, struct inverter_stat const *istat
                 ,int *sqlite3_err)
{

        sqlite3_stmt *stmt = NULL;
       *sqlite3_err = sqlite3_prepare_v2(db_conn, SQL_INSERT_INVERTER_STAT, -1
                                        ,&stmt, NULL);

       *sqlite3_err = sqlite3_bind_int(stmt, 1, istat->stat_id);
       *sqlite3_err = sqlite3_bind_text(stmt, 2, istat->serial_no, -1, NULL);
       *sqlite3_err = sqlite3_bind_int64(stmt, 3, istat->time_taken);
       *sqlite3_err = sqlite3_bind_double(stmt, 4, (double)istat->value);

       *sqlite3_err = sqlite3_step(stmt);

       sqlite3_finalize(stmt);
       return 1;
}

1 个答案:

答案 0 :(得分:0)

对于尝试将四字节浮点数读取为8字节双精度的东西,我会期望这种东西,其他四个字节是......好吧,无论如何。这真的不行,但是如果你把一个显式的强制转换(double)flt_var作为第三个参数,那会有帮助吗?