Search code examples
cprintfexitternary

Ternary with printf and exit function


I want to use a ternary this way

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main (int argc, char **argv) {

   *condition* ? (printf("some text") & exit(1)) : NULL;

   *some code*

   return 0;
};

, but when i compile the file i get this error

36:40: error: void value not ignored as it ought to be
   36 |     condition ? (printf("Some text") & exit(1)) : NULL;
      |                                        ^~~~~~~

i have read some other topics, but i can't find anything enlightening to my situation. i want to if true the condition, to print a message informing that is necessary some arguments to the program to run and then exit because the program don't have the conditions necessary to run.


Solution

  • & is a bitwise AND operation - it takes bits of two operands and computes bitwise AND of them. exit() function returns a void - you can't do calculations on a void value, it's a void.

    Typically, comma operator , is used to chain commands in some context where only a single expression is allowed. The type of result of , operator is the type of the second expression.

    There are specific rules for allowed types of expressions in conditional operator ?:, and types there can't be void.

    The code could be made valid by, for example (assuming condition is valid):

    condition ? printf("Some text"), exit(1), 0 : 0;
    

    But really just:

    if (condition) { printf("Some text"); exit(1); }