There was exactly this bug in Android for a long time - memset always cleared the memory to zero. I can&#x27;t find a good link to this, but try maybe <a href="https:&#x2F;&#x2F;review.source.android.com&#x2F;#patch,sidebyside,14699,1,libc&#x2F;memset.c" rel="nofollow">https:&#x2F;&#x2F;review.source.android.com&#x2F;#patch,sidebyside,14699,1,...</a>, not that Firefox will let me connect to check.<p>As for the rules for VC++, they are conservative - see <a href="https:&#x2F;&#x2F;msdn.microsoft.com&#x2F;en-us&#x2F;library&#x2F;k1a8ss06.aspx" rel="nofollow">https:&#x2F;&#x2F;msdn.microsoft.com&#x2F;en-us&#x2F;library&#x2F;k1a8ss06.aspx</a>. In general, you&#x27;re right that it&#x27;s much nicer to use than the shit gcc foists on you, but these conservative rules are symptomatic of its reluctance to integrate C and asm very well.<p>That&#x27;s one problem gcc doesn&#x27;t have - my complaint isn&#x27;t that you can, just that it makes you do it the hard way. But that&#x27;s totally unnecessary... a few years ago I used CodeWarrior for PowerPC. It was very pleasant, and did a good job of making it easy to have C and asm coexist. You allocated registers by declaring variables as `register&#x27;, and the compiler would figure out how to put them somewhere sensible on entry to each asm block, and spill the ones that were modified, if that even proved necessary. You could leave one asm block having just modified a register variable, assert that it had done what you expected, then start another one, along the lines of:<p><pre><code>    register int fred=0;
    asm addi fred,1
    assert(fred==1);
    asm addi fred,1
</code></pre>
I wish VC++ would do something like that; you can sort-of do it, but it&#x27;s impossible to request that a given value goes somewhere in particular (register, frame relative, etc.) and this can stymie you sometimes. But they decided to remove inline assembly language altogether for x64, so that&#x27;s one way of solving the problem. Still nicer than what gcc does.