ele*_*ele 2 c variable-assignment conditional-operator
单步执行a时sqlite3_stmt,我想检查返回值NULL而不是存储它并检查存储的值.
这就是我现在正在做的事情:
char *email = (char *)sqlite3_column_text(statement, 10);
if (email == NULL) email = "";
Run Code Online (Sandbox Code Playgroud)
这里是想什么,我想在做,减去双呼叫column:
char *email = ((char *)sqlite3_column_text(statement, 10)) ? (char *)sqlite3_column_text(statement, 10) : "";
Run Code Online (Sandbox Code Playgroud)
有没有办法更简洁地表达第二个表达式?我必须重复做很多这些,所以我正在寻求简洁.
我知道这是控制流的问题,而不是SQLite API本身的问题,但是你有它.我想不出这样做的好方法.
C的GNU扩展允许三元条件运算符评估其条件是否为真,并且第一个分支中没有任何内容:
char *email = (char *)sqlite3_column_text(statement, 10);
email = email ? : "";
Run Code Online (Sandbox Code Playgroud)
或者,更准确地说是你所说的
char * email = (char *)sqlite3_column_text(statement, 10) ? : "";
Run Code Online (Sandbox Code Playgroud)
这与Clang编译时也适用.
另一种可能性是:
char *email = (char *)sqlite3_column_text(statement, 10);
email = (NULL == email) ? email : "";
Run Code Online (Sandbox Code Playgroud)
但我想我建议你选择第一个选择.如果您正在做很多事情,请创建一个代码段.