I realize it&#x27;s not quite your point, but if you don&#x27;t like repeating yourself, macros and &quot;statement expressions&quot; make it simple to extend languages to capture &quot;it&quot; to a tmp variable and then reuse it:<p><pre><code>  #include &lt;stdlib.h&gt;
  #include &lt;stdio.h&gt;

  #define dry(x, test, if_true, if_false)  ({              \
              typeof(x) _x = (x);                          \
              (_x test) ? if_true(_x) : if_false(_x);      \
          })

  #define abs(x) dry(x, &lt; 0, -, )

  int main(int argc, char **argv) {
      if (argc == 1) printf(&quot;usage: %s num [num]...&quot;, argv[0]);
      for (int i = 1; i &lt; argc; i++) {
          char *string = argv[i];
          int num = atoi(string);
          printf(&quot;string &#x27;%s&#x27;, num %d, abs %d\n&quot;,
                 string, num, abs(num));
      }
      return 0;
  }

  $ gcc -std=gnu99 -Wall -Wextra -O3 -g  dry.c -o dry

  $ dry 2 1 0 -1 -2
  string &#x27;2&#x27;, num 2, abs 2
  string &#x27;1&#x27;, num 1, abs 1
  string &#x27;0&#x27;, num 0, abs 0
  string &#x27;-1&#x27;, num -1, abs 1
  string &#x27;-2&#x27;, num -2, abs 2</code></pre>