Точка с запятой после тела функции
От: UGN  
Дата: 11.08.03 12:32
Оценка:
Здравствуйте, Аноним, Вы писали:

SWW>>>Все хорошо, только на фига здесь точки с запятой?


UGN>>Нравится мне так... Они мешают?


А>После тела функции — определенно.


А это... Никак не избавлюсь от этой привычки...

Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?

12.08.03 20:36: Ветка выделена из темы bool
Автор: nap2k
Дата: 11.08.03
— ПК
Re[6]: Точка с запятой после тела функции
От: SWW Россия  
Дата: 11.08.03 16:42
Оценка:
А>>После тела функции — определенно.

UGN>А это... Никак не избавлюсь от этой привычки...


UGN>Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?


В стандарте не написано, что они должны быть, следовательно их быть не должно. Вообще-то после описания класса или структуры ; тоже не ставится, после должен идти список объектов этого класса, заканчивающийся точкой с запятой. И только если этот список отсутствует, то точка с запятой оказывается после описания класса, т.е. это не прямое требование синтаксиса, а как бы косвенное.
Re[6]: Точка с запятой после тела функции
От: Андрей Тарасевич Беларусь  
Дата: 11.08.03 21:57
Оценка: 18 (2)
Здравствуйте, UGN, Вы писали:

UGN>Здравствуйте, Аноним, Вы писали:


SWW>>>>Все хорошо, только на фига здесь точки с запятой?


UGN>>>Нравится мне так... Они мешают?


А>>После тела функции — определенно.


UGN>А это... Никак не избавлюсь от этой привычки...


UGN>Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?


Это зависит от того, где располагается твое тело функции.

Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.

Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.
Best regards,
Андрей Тарасевич
Re[7]: точка с запятой
От: UGN  
Дата: 12.08.03 07:13
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Это зависит от того, где располагается твое тело функции.


АТ>Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.


Да, действительно там это указано. Спасибо.

АТ>Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.


Имеется ли в виду пункт 7/1, где в грамматике указан function-definition без точки с запятой на конце?

Т.е. если не указано, значит строго нельзя? А если бы было можно ставить, то стояло бы "opt", как в классах? (9.2)

А вот 7/3, честно говоря, не понял

Там говорится о том, что в определении класса или перечисления нужно указывать имя?

А где про точку с запятой?
Re[8]: точка с запятой
От: Андрей Тарасевич Беларусь  
Дата: 12.08.03 07:58
Оценка: 30 (2)
Здравствуйте, UGN, Вы писали:

UGN>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>Это зависит от того, где располагается твое тело функции.


АТ>>Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.


UGN>Да, действительно там это указано. Спасибо.


АТ>>Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.


UGN>Имеется ли в виду пункт 7/1, где в грамматике указан function-definition без точки с запятой на конце?


Да. Сначала именно это.

UGN>Т.е. если не указано, значит строго нельзя?


Да, если грамматика не разрешает, то строго нельзя.

UGN>А если бы было можно ставить, то стояло бы "opt", как в классах? (9.2)


Не обязательно. Есть и другой потенциальный способ "протащить" точку с запятой туда. В частности — пустая декларация. Если бы С++ разрешал использование пустой декларации, то можно было бы ставить точку с запятой после определения функции (причем можно было бы ставить сколько угодно точек с запятой). В этом случае эта точка с запятой к самой функции никакого отношения не имела бы, а как бы представляла собой бы совершенно отдельную пустую декларацию, идущую сразу за телом функции.

И на первый взгляд из рассмотрения фрагмента грамматики в 7/1 может показаться, что язык разрешает пустую декларацию. А именно, обрати внимание на самое последнее правило — правило для simple-declaration. Simple-declaration завершается точкой с запятой и содержит две части, каждая из которых помечена как опциональная. Т.е. на превый взгляд можно опустить обе части и мы получим пустую декларацию.

UGN>А вот 7/3, честно говоря, не понял

UGN>Там говорится о том, что в определении класса или перечисления нужно указывать имя?
UGN>А где про точку с запятой?

А вот именно 7/3 и говорит, что в simple-declaration не могут отсутствовать обе части одновременно. Это означает, что в С++ не допускается пустая декларация.

Других способов легально "протащить" завершающую точку запятой в определение функции в С++ нет.

Некоторые компиляторы не ругаются на такое использование точки с запятой. Как правило это означает, что они не настаивают на соблюдении требований 7/3 и расценивают завершающую точку запятой как пустую декларацию, следующую сразу за определением функции.
Best regards,
Андрей Тарасевич
Re[9]: точка с запятой
От: UGN  
Дата: 12.08.03 08:12
Оценка:
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.