如果变量为NULL,则有条件地设置变量

当单步执行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本身的问题,但你有它。 我想不出这样做的好方法。

C的GNU扩展允许三元条件运算符评估其条件是否为真,并且第一个分支中没有任何内容:

 char *email = (char *)sqlite3_column_text(statement, 10); email = email ? : ""; 

或者,更确切地说是你所说的

 char * email = (char *)sqlite3_column_text(statement, 10) ? : ""; 

这与Clang编译时也适用。

另一种可能性是:

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