#include <stdio.h>
#include <stdlib.h>
int main(void) {
  puts( getenv("FOO") ?: "FOO is undefined" );
  return 0;
}
GCC и Clang позволяют пропускать второй аргумент тернарного оператора, и в итоге можно делать вот такие штуки. Код выше аналогичен следующему:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
  char *tmp = getenv("FOO");
  if(!tmp)
    tmp = "FOO is undefined";
  puts(tmp);
  return 0;
}
Теперь я вообще не понимаю, как я без этого раньше-то на Си писал!








