当通过步进sqlite3_stmt
,我想核对的返回值为NULL
,而不是存储,并检查与存储的值。
下面是我现在在做什么:
char *email = (char *)sqlite3_column_text(statement, 10);
if (email == NULL) email = "";
这里是想什么,我在做,减去双呼叫column
:
char *email = ((char *)sqlite3_column_text(statement, 10)) ? (char *)sqlite3_column_text(statement, 10) : "";
有没有一些方法更简洁地表达第二体现在哪里? 我也做了很多的这些重复,所以我在寻找简洁。
我知道这是控制流的问题,而不是SQLite的API本身就是一个问题,但你有它。 我想不出一个好办法做到这一点。
一个GNU扩展到C允许三元条件操作,以评估其状态,如果这是真的,并没有什么第一分公司:
char *email = (char *)sqlite3_column_text(statement, 10);
email = email ? : "";
或者,你越是说的正是你要找的
char * email = (char *)sqlite3_column_text(statement, 10) ? : "";
铿锵编译时,过此作品。
另一种可能性是:
char *email = (char *)sqlite3_column_text(statement, 10);
email = (NULL == email) ? email : "";
但我想我会建议只是你的第一选择会。 做一个代码片段,如果你这样做了很多。
工作的呢?
char *email;
// Reviewed by "R." to verify sequence point correctness.
email = (email = (char *)sqlite3_column_text(statement, 10))? email : "";