title: pure/const function attributes in different compilers
body: <p><strong>pure</strong> is a function attribute which says that a function does not modify any global memory.<br>
  <strong>const</strong> is a function attribute which says that a function does not read/modify any global memory.</p>
  
  <p>Given that information, the compiler can do some additional optimisations.</p>
  
  <p>Example for GCC:</p>
  
  <pre><code>float sigmoid(float x) __attribute__ ((const));
  
  float calculate(float x, unsigned int C) {
      float sum = 0;
      for(unsigned int i = 0; i &lt; C; ++i)
          sum += sigmoid(x);
      return sum;
  }
  
  float sigmoid(float x) { return 1.0f / (1.0f - exp(-x)); }
  </code></pre>
  
  <p>In that example, the compiler could optimise the function <em>calculate</em> to:</p>
  
  <pre><code>float calculate(float x, unsigned int C) {
      float sum = 0;
      float temp = C ? sigmoid(x) : 0.0f;
      for(unsigned int i = 0; i &lt; C; ++i)
          sum += temp;
      return sum;
  }
  </code></pre>
  
  <p>Or if your compiler is clever enough (and not so strict about floats):</p>
  
  <pre><code>float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }
  </code></pre>
  
  <p>How can I mark a function in such way for the different compilers, i.e. GCC, Clang, ICC, MSVC or others?</p>