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

标签 c variable-assignment conditional-operator

当单步执行 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 本身的问题,但你知道了。我想不出执行此操作的好方法。

最佳答案

A GNU extension to C如果条件为真且第一个分支中没有任何内容,则允许三元条件运算符对其条件求值:

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

但我认为我建议您只选择第一个选项。如果您经常这样做,请制作一个代码片段。

关于如果变量为 NULL,则有条件地设置它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121336/

相关文章:

c - C 结构与 Fortran 的互操作

c - 函数和宏之间的区别

python-3.x - 在 Python 3 中将文件路径分配给变量

java - 让java显示正确的减量

java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本? (&&=, ||=)

c - 在解析 argv 变量时在 C 中使用 strsep 不起作用

perl - 如何跳过类似于Haskell模式匹配的Perl列表分配中的元素?

objective-c - 这是三元条件吗? : correct (Objective) C syntax?

c - 这个语句在c中如何执行条件操作?

c - reading/dev/urandom 线程安全吗?