<div dir="ltr"><div><div><div><div><div><div>Is this C++ or C?<br></div>In C++, both declarations represent the same thing (a function with no arguments), so there shouldn't be any meaningful difference in the AST. <br>In C the foo() means "unspecified arguments", foo(void) means "no arguments". <br><br></div>For C++, I guess you could try to find the location in the source of the parenthesis [the AST has "sourcelocation", I think - yes, it does: <a href="https://stackoverflow.com/questions/11083066/getting-the-source-behind-clangs-ast">https://stackoverflow.com/questions/11083066/getting-the-source-behind-clangs-ast</a> ], and see if there is a "void" between there - of course, that could get interesting if someone does:<br><br></div>#define V void<br></div>void foo(V) { ... }<br><br></div><div>or<br><br>#define NO_ARGS (void)<br></div><div>void foo NO_ARGS { ... }<br><br></div><div>[and many other variations, that one could come up with, I'm sure]<br></div><div><br></div>but for the simple case where there are no macros involved, it should work.<br><br>--<br></div>Mats<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 18 July 2017 at 13:19, Frank Redeker 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 18 July 2017 at 10:33, Frank Redeker via cfe-dev<br>
</span><span class="">> <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a> <mailto:<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><wbr>>> wrote:<br>
><br>
>     Hello list,<br>
><br>
>     is there is an easy way to distinguish if a function is declared as<br>
><br>
>     void foo (void);<br>
>     or<br>
>     void foo ();<br>
><br>
>     The reason I'm asking is that I use an ASTVisitor to generate stub<br>
>     functions. But the compiler that I use reports an error when the<br>
>     prototype is declared with (void) but the implementation not.<br>
><br>
<br>
</span><span class="">> Am 18.07.2017 um 11:41 schrieb Alex L:<br>
> You can look at it's type and check if it has a function prototype (i.e.<br>
> it has parameters or (void), see the FunctionProtoType class), e.g.<br>
> FD->getType()-><wbr>isFunctionProtoType() .<br>
><br>
<br>
</span>Hallo Alex,<br>
<br>
thanks for the hint. But the FD->getType()-><wbr>isFunctionProtoType()<br>
returns true in both cases and FD->getType()-><wbr>isFunctionNoProtoType()<br>
returns false in both cases.<br>
<br>
So is there any other way to distinguish the declarations?<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
Frank<br>
______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div>