HLFX.Ru Forum Страницы (13): « 1 2 3 [4] 5 6 7 8 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Заметки на полях (https://hlfx.ru/forum/showthread.php?threadid=5815)


Отправлено Crystallize 08-06-2022 в 16:16:

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

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


Отправлено XaeroX 08-06-2022 в 16:42:

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-06-2022 в 19:02:

Цитата:
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'


Отправлено KiQ 08-06-2022 в 20:33:

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

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


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

__________________
-Brain is dead-


Отправлено Crystallize 09-06-2022 в 02:43:

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

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


Отправлено Дядя Миша 09-06-2022 в 06:14:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено PRoSToTeM@ 15-06-2022 в 20:58:

Цитата:
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


Отправлено Дядя Миша 16-06-2022 в 08:47:

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'


Отправлено PRoSToTeM@ 16-06-2022 в 11:41:

Цитата:
Дядя Миша писал:
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 посматривать описание языка с примерами.


Отправлено Дядя Миша 17-06-2022 в 09:50:

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

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'


Отправлено PRoSToTeM@ 17-06-2022 в 19:15:

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


Отправлено Дядя Миша 17-06-2022 в 19:47:

Да уж

__________________
My Projects: download page

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

Цитата:

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


Отправлено PRoSToTeM@ 20-06-2022 в 01:19:

Цитата:
Дядя Миша писал:
Необязательно. Можно и так
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;


Отправлено XaeroX 20-06-2022 в 01:51:

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 20-06-2022 в 06:17:

Цитата:
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'


Временная зона GMT. Текущее время 11:22. Страницы (13): « 1 2 3 [4] 5 6 7 8 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

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