HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Страницы (11): « 1 2 3 [4] 5 6 7 8 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
Вы возможно не задумывались, но это запрещённая конструкция по сути.

Недавно узнал что переменные в Си можно объявлять не только в начале функции но и в любом месте, как в плюсах, если поставить вот такие скобки. В коде не попадалось такое.

Сообщить модератору | | IP: Записан
Сообщение: 209651

Старое сообщение 08-06-2022 16:16
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Crystallize
Но они будут видны только внутри этих скобок.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 209652

Старое сообщение 08-06-2022 16:42
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Crystallize писал:
если поставить вот такие скобки

У меня есть именованный subscope, но я так и не придумал какой от него прок.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209655

Старое сообщение 08-06-2022 19:02
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



Цитата:
Дядя Миша писал:
Очередная чумовая проверка компиляторов от дяди Мишы.
Вставьте куда-нибудь вне любой функции неименованый блок скобок
C++ Source Code:
{
}

И посмотрите как будет ругаться компилятор. Вы возможно не задумывались, но это запрещённая конструкция по сути. Неименованный блок скобок возможен только внутри тела функции, как subscope.


В яве таким образом обозначаются блоки инициализации. Статический вариант вызывается при инициализации класса в принципе, а нестатический - при создании каждого экземпляра. Удобно, на самом деле, если хочется запихнуть какую-то рутину вне конструктора

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 209661

Старое сообщение 08-06-2022 20:33
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
У меня есть именованный subscope, но я так и не придумал какой от него прок.

Дополнительная разметка кода для чайников? Коммент для конкретного фрагмента кода?

Отредактировано Crystallize 09-06-2022 в 02:45

Сообщить модератору | | IP: Записан
Сообщение: 209664

Старое сообщение 09-06-2022 02:43
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Crystallize писал:
Дополнительная разметка кода для чайников?

Ну, по нему можно делать поиск

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209667

Старое сообщение 09-06-2022 06:14
-
PRoSToTeM@
Частый гость

Дата регистрации: Nov 2011
Проживает: Иваново
Сообщений: 57
Возраст: 27

Рейтинг



Цитата:
Crystallize писал:
Недавно узнал что переменные в Си можно объявлять не только в начале функции но и в любом месте, как в плюсах, если поставить вот такие скобки. В коде не попадалось такое.

Да и без этих скобок можно в любом месте как в плюсах начиная с C99, но студия до недавних пор плохо умела в C99.

Добавлено 15-06-2022 в 23:58:

Цитата:
Дядя Миша писал:
Дошло. Тут неинтуитивное поведение на самом деле.
Если мы пишем
C++ Source Code:
int foo[8] = { 0 };

У нас массив заполняется нулями. После чего мы вправе(?) ожидать что вот такая конструкция
C++ Source Code:
int foo[8] = { -1 };

Запишет везде -1, однако этого естественно не происходит.
Сама операция присовоения вызывает установку всех элементов массива в 0, кроме тех, для которых значения указаны явно. В первом случае явно указано значение для первого элемента, оно равно нулю, остальные равны нулю по дефолту, из-за чего и формируется ложный стереотип, будто задание еденичного значения забьёт все элементы этим числом. Но в реальности этого конечно не происходит.

В языке Pawn есть синтаксис с многоточием для ожидаемой инициализации всего массива одним значением:
C++ Source Code:
new arr[8] = {-1, ...} // -1, -1, -1, ..., -1

Правда там через это же многоточие можно и арифметические прогрессии устроить:
C++ Source Code:
new arr[8] = {1, 2, ...} // 1, 2, 3, 4, 5, ..., 8

Сообщить модератору | | IP: Записан
Сообщение: 209813

Старое сообщение 15-06-2022 20:58
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



PRoSToTeM@ я уже сделал заполнение одним значением через

C++ Source Code:
int aray[8] = -1;

с выдачей предупреждения о nonstandard extension used.

Добавлено 16-06-2022 в 11:47:

Очередной прикол, лишний раз показывающий, что модификаторы типов контекст вообще не учитывают, по крайней мере в шестёрке.

C++ Source Code:
1
mutable enum foo
2
{
3
  TEST = 0,
4
};

Попробуйте на остальных компиляторах. MSVC 6.0 это прекрасно собирает.

Впрочем собирается даже вот такое
C++ Source Code:
1
virtual enum foo
2
{
3
  TEST = 0,
4
};

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209815

Старое сообщение 16-06-2022 08:47
-
PRoSToTeM@
Частый гость

Дата регистрации: Nov 2011
Проживает: Иваново
Сообщений: 57
Возраст: 27

Рейтинг



Цитата:
Дядя Миша писал:
PRoSToTeM@ я уже сделал заполнение одним значением через
C++ Source Code:
int aray[8] = -1;

с выдачей предупреждения о nonstandard extension used.

Тоже неплохой вариант.

Цитата:
Дядя Миша писал:

C++ Source Code:
1
mutable enum foo
2
{
3
  TEST = 0,
4
};

На gcc и clang ошибка, MSVC выдаёт варнинг.

Цитата:
Дядя Миша писал:

C++ Source Code:
1
virtual enum foo
2
{
3
  TEST = 0,
4
};

Аналогично, на двух ошибка, в MSVC варнинг.

Ты можешь и сам проверять на этом godbolt.org, плюс ещё можно на en.cppreference.com посматривать описание языка с примерами.

Отредактировано PRoSToTeM@ 16-06-2022 в 11:45

Сообщить модератору | | IP: Записан
Сообщение: 209819

Старое сообщение 16-06-2022 11:41
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Вот еще любопытная шляпа:

C++ Source Code:
void (Test)( void )
{
}

Скобки просто выбрасываются, т.е. это обычная функция.
А вот так
C++ Source Code:
void (*Test)( void )
{
}

разумеется уже ошибка. Указатель на функцию не ждёт объявления тела.

Добавлено 17-06-2022 в 12:50:

Возможно это какое-то историческое наследие - объявление имени функции в скобках.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209827

Старое сообщение 17-06-2022 09:50
-
PRoSToTeM@
Частый гость

Дата регистрации: Nov 2011
Проживает: Иваново
Сообщений: 57
Возраст: 27

Рейтинг



Дядя Миша, это чтобы аналогично названный функциональный макрос не раскрывался (например, isdigit).
https://stackoverflow.com/questions...ction-name-mean

Сообщить модератору | | IP: Записан
Сообщение: 209831

Старое сообщение 17-06-2022 19:15
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Да уж

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209832

Старое сообщение 17-06-2022 19:47
-
PRoSToTeM@
Частый гость

Дата регистрации: Nov 2011
Проживает: Иваново
Сообщений: 57
Возраст: 27

Рейтинг



Цитата:
Дядя Миша писал:
Необязательно. Можно и так
C++ Source Code:
typedef shared predictable persistent vec3 worldpos;

Блин, опять typedef с перепутанными аргументами. В плюсах же есть нормальный typedef:
C++ Source Code:
using worldpos = shared predictable persistent vec3;

Правда ключевое слово не самое подходящее. Я бы рассмотрел такие варианты:
C++ Source Code:
typedef worldpos = shared predictable persistent vec3;

C++ Source Code:
type worldpos = shared predictable persistent vec3;

C++ Source Code:
typealias worldpos = shared predictable persistent vec3;

C++ Source Code:
typename worldpos = shared predictable persistent vec3;

Отредактировано PRoSToTeM@ 20-06-2022 в 01:22

Сообщить модератору | | IP: Записан
Сообщение: 209857

Старое сообщение 20-06-2022 01:19
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Лучше alias, да. Потому что typedef это довольно неудачное ключевое слово, оно не создает новый тип.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 209858

Старое сообщение 20-06-2022 01:51
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
оно не создает новый тип.

А чтож оно по твоему делает? Удаляет старый тип?
Using у меня ассоциируется с неймспейсами и тоже не создаёт ничего нового.

Добавлено 20-06-2022 в 09:17:

А typename это вообще для шаблонофф.
Я не намерен коверкать синтаксис, пока язык не будет завершен.
Пусть он для начала получит возможности на уровней той же MSVC 6.0.
По большей части, во всяком случае. А потом посмотрим.
Кое-что я с удовольствием возьму из свежих редакций.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 209863

Старое сообщение 20-06-2022 06:17
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 19:03. Новая тема    Ответить
Страницы (11): « 1 2 3 [4] 5 6 7 8 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024