title: How to jump to label inside a macro/function that returns a value
body: <p>I have the following function:</p>
  
  <pre><code>enum MqErrorE ReadI(struct MqS* ctx, int *i);
  </code></pre>
  
  <p>The function stores a result in <code>i</code> and returns <code>OK</code> or <code>ERROR</code> flag.</p>
  
  <p>If the function returns <code>ERROR</code>, I want to jump to a label called <code>error</code>.</p>
  
  <pre><code>int i; 
  if (ReadI(ctx,&amp;i) == ERROR)
      goto error; 
  // ...
  error:
      // do some error processing
  </code></pre>
  
  <p>To make the code more "user-friendly" I would like to do something like:</p>
  
  <pre><code>int i; 
  i = ReadI_something(ctx); // on error jump to "label" 
  // ... 
  error: 
      //... 
  </code></pre>
  
  <p>In other words, I need <code>ReadI_something</code> to return a value but also to be able to jump to the label.</p>
  
  <p>As a restriction I want to avoid using <code>longjmp</code>/<code>setjmp</code>.</p>
  
  <p>How can I write a macro or function to do so?</p>