Почему запятая необязательна в объявлениях переменных функций C ++? - PullRequest
8 голосов
/ 26 ноября 2011

Есть ли разница в этих двух декларациях?

int foo( int a, ... );

и

int foo( int a ... );

Если нет никакой разницы, какой смысл делать второй синтаксически допустимым?

1 Ответ

2 голосов
/ 26 ноября 2011

Это предположение, но в C ++ может иметь смысл иметь функцию без других параметров, например, void f(...), тогда как в C такая функция бесполезна (насколько я знаю), поэтому ... должен следовать некоторымдругой параметр и, следовательно, запятая.

С точки зрения грамматики проще просто разрешить void f( int a ... ) и придать ему очевидный смысл, чем запретить его, и это не вызовет большойнагрузка на разработчиков компиляторов или путаница для программистов.

(Первоначально я думал, что это может быть связано с тем, чтобы сделать грамматику для пакетов параметров более регулярной, но я обнаружил, что это явно разрешено в C ++ 03 в любомслучай.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...