EDIT: добавлены некоторые уточнения, которые сильно меняют условие вопроса, обратите внимание, что прежде чем судить ответы.
Я получаю переменную среды в форме const char*
. Env var может быть
set MyBinaryEnvVar=
)Следовательно, const char * form будет
Я хотел бы протестировать его с одним лайнером, Unset и "0", не пройдя тест, и "1" передав его. Итак, что-то вроде:
if(getEnvVar("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}
getEnvVar
возвращает const char *.
Тесты показали на VisualStudio 2010, что три значения для envVar проходят тест, поэтому
if ("") <==> if ("0") <==> if ("1") <==> TRUE
благодаря
Предполагая, что getEnvVar
может возвращать NULL для неустановленных значений, вы не можете эффективно проверить NULL и сравнить значение в одной строке.
Предполагая, что вы сделаете много этого и хотите получить сжатый способ сделать это, вы можете делегировать обе операции к новой функции и называть ее как однострочный:
bool isVarSet(const char* var)
{
const char* val = getEnvVar("MyBinaryEnvVar");
if (val != NULL && strcmp(val, "1") == 0) {
return true;
}
return false;
}
if(isVarSet("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}
С другой стороны, если getEnvVar
возвращает пустую строку ""
для неустановленных значений, вы можете просто сделать
if(strcmp(getEnvVar("MyBinaryEnvVar"), "1") == 0) {dontWorry();}
else {beHappy();}
См. strcmp()
для сравнения строк. Все значения, возвращаемые getenv()
являются строками. Все, что вам нужно, это оператор if
.
Обратите внимание, что ваша логика пропускает "другой" случай (когда значение действительно не задано (т.е. getenv()
возвращает NULL
), или это что-то другое, чем указанные выше значения.
strncmp()
или использовать std::string
как OP запрашивает c ++ .