On 05/10/16 22:24, Florian Weimer wrote:
> * David Brown:
> 
>> Far and away the best solution would be for C++ to support named
>> parameters or named arguments:
>>
>> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4172.htm>
>>
>> Then you could write:
>>
>>      foo(1, 2, bar_p: true);
>>
>> You could also write
>>
>>      foo(y: 2, bar_p: true, x: 1)
>>
>> and get the same call.
>>
>> It is always much better if you can put something in code rather than a
>> comment.
> 
> True, but I don't think this is possible because function argument
> names are explicitly *not* part of the API today (and are often
> mangled in public header files, if they are included at all).

Why is that?  I have always felt that you should have all the required
information to use a function in its declaration in the header - you
should not have to look up the definition unless you want to know /how/
it works.  And in order to know how to use a function, you need to know
what the parameters are - when that can be communicated through their
name, there is no need to clutter the file with extra comments.

But it sounds like there was an active decision not to include argument
names in header declarations in gcc code - and I am curious to know the
basis for that.

> 
> Something analogous to std::initializer_list, but for C99 designated
> initializer syntax might be more acceptible.  So in your example:
> 
>   foo({.y = 2, .bar_p = true, .x = 1})

Are you thinking here of making foo a function that takes a single
struct argument, or as a general method for named parameters as an
alternative syntax to "foo(y: 2, bar_p: true, x: 1)" ?  Personally, I
would prefer to drop the brackets "foo(.y = 2, .bar_p = true, .x = 1)" -
I think that would be nicer than either the N4172 syntax or the syntax
with brackets.  I had merely suggested the N4172 choice of a colon
syntax because it is a lot more likely that a proper C++ feature
proposal gets implemented than a suggestion in a mailing list post!

But unless it is realistic that gcc will get named parameter support in
C and/or C++ (either as an extension, or due to a future C or C++
language standard), then a discussion about these details is just
bikeshedding.

> 
> The advantage is that functions supporting this invocation style would
> have to be marked explicitly in the sources, so there would not be an
> accidental source code dependency on a non-portable aspect of system
> header files.
> 


I suppose that even if gcc were to support named parameters or other
great new features, you couldn't use those features in the source code
for gcc without causing a chicken-and-egg problem.

Reply via email to