Injecting side effects by abusing comma operator

Comma operator can be used sometimes to inject side effects into expressions:

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

int main() {
    int max = 10;
    double x = 0;

    while (max--, printf("%d\n", max), max) {
        /* sth */
    }

    x = printf("x: %f", x), x = sqrt(x), printf(", sqrt(x): %f\n", x), x;

    return EXIT_SUCCESS;
}

bash-3.2$ gcc -strict -pedantic -Wall main.c && ./a.out
9
8
7
6
5
4
3
2
1
0
x: 0.000000, sqrt(x): 3.316625
It's discouraged, for example by MISRA C

2 comments:

  1. Debugging this would be an exciting experience ;) I like those tricks, please keep posting them ;)

    ReplyDelete