<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 14, 2016 at 5:48 AM, David Chisnall via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 14 Nov 2016, at 09:43, Eric Fiselier via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
><br>
><br>
><br>
> On Sat, Nov 12, 2016 at 11:09 AM, Mehdi Amini via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
> main is marked as “norecurse” in C++ and not in C:<br>
><br>
> I would be interested in seeing the standardese associated with each behavior.<br>
><br>
> /Eric<br>
<br>
</span>Indeed.  If I implement main in C++ and call it from C, or implement main in C and call it from C++, is it undefined behaviour in both cases?  This seems like a very odd inconsistency if I have to know the source language for both the caller and callee to determine whether something is UB.<br></blockquote><div><br></div><div>I suspect that this restriction in C++ came about in the first place because some compilers were putting the code for dynamic initialization of static variables at the beginning of the function called "main", and thus recursively calling it would rerun the static initialization.</div></div></div></div>