有条件设置一个变量,如果它是NULL(Conditionally set a variable if

2019-07-20 16:25发布

当通过步进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本身就是一个问题,但你有它。 我想不出一个好办法做到这一点。

Answer 1:

一个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 : "";

但我想我会建议只是你的第一选择会。 做一个代码片段,如果你这样做了很多。



Answer 2:

工作的呢?

char *email;
// Reviewed by "R." to verify sequence point correctness.
email = (email = (char *)sqlite3_column_text(statement, 10))? email : "";


文章来源: Conditionally set a variable if it's NULL