#1 2019-11-05 21:49:21

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

while (1) {...} or for (;;) {...}

предлагаю эту тему для обсудить "особенности использования Cи и С++"
только без перехода на личности, иначе снесут big_smile

#2 2019-11-05 22:13:35

Avazart
Участник
Зарегистрирован: 2019-05-05
Сообщений: 181

Re: while (1) {...} or for (;;) {...}

Да нет никакой разницы, что тут обсуждать то?

#3 2019-11-06 01:38:11

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 347

Re: while (1) {...} or for (;;) {...}

NoName пишет:

предлагаю эту тему для обсудить

С какой целью?

#4 2019-11-06 10:30:23

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 588

Re: while (1) {...} or for (;;) {...}

while (true)

#5 2019-11-06 10:35:35

Watchdog
Гость

Re: while (1) {...} or for (;;) {...}

delete this; (C++)

#6 2019-11-06 11:27:33

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

Re: while (1) {...} or for (;;) {...}

Kaka пишет:
NoName пишет:

предлагаю эту тему для обсудить

С какой целью?

интересно наблюдать за пенсионерами, которые учат уму-разуму молодняк ),  и в этом споре сам что то интрересное узнаю,
например что "между С и С++ разницы нет", вот сижу доки читаю, пока думаю что это утверждение таки спорно. я ведь ++  особо не использую, спорить не буду.

Kaka, а Вы часом с Азаровым или Watchdog`ом не работали?  )

#7 2019-11-06 12:18:09

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,732

Re: while (1) {...} or for (;;) {...}

NoName пишет:

... Kaka, а Вы часом с Азаровым или Watchdog`ом не работали?  )

В нашей комании не хватает ещё участника с ником всевидящий Кука. Тогда уж точно можно было бы билеты продвать. smile

#8 2019-11-06 15:10:51

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

Re: while (1) {...} or for (;;) {...}

насчет тождесвенности  структуры  и класса  - это актульно только для ++
основная разница - в структуре  все члены по уполчанию открыты

надеюсь си никогда не станет ++ ),  ваше ООП - воплощение вселенского зла )

#9 2019-11-06 15:18:04

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,732

Re: while (1) {...} or for (;;) {...}

NoName пишет:

... надеюсь си никогда не станет ++ ),  ваше ООП - воплощение вселенского зла )

Некоторые сложные задачи очень тяжело, а то и вовсе не решаются, без ООП. Например современные GUI. Это Ж..Ж неспроста! А во зло можно обратить что угодно, даже любовь!

#10 2019-11-06 15:34:13

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 347

Re: while (1) {...} or for (;;) {...}

NoName пишет:

интересно наблюдать за пенсионерами, которые учат уму-разуму молодняк )

Не понял Вы наблюдатель? Или продавец попкорна? Если второе, то круто - отличный заход!

NoName пишет:

"между С и С++ разницы нет"

Это кто такое сказал-то? Видимо, человек не знающий ни того, ни другого.

#11 2019-11-06 16:01:01

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

Re: while (1) {...} or for (;;) {...}

Kaka пишет:
NoName пишет:

интересно наблюдать за пенсионерами, которые учат уму-разуму молодняк )

Не понял Вы наблюдатель? Или продавец попкорна? Если второе, то круто - отличный заход!

NoName пишет:

"между С и С++ разницы нет"

Это кто такое сказал-то? Видимо, человек не знающий ни того, ни другого.

я разливаю клиентам брендованную ортофосфорную  кислоту, но очень хочу войти в айти ) говорят там денег реально немеренно,
пипл  копипастит код из стековерфлоу и горя не знает.

add

Редактировался NoName (2019-11-06 16:04:56)

#12 2019-11-06 16:14:35

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

Re: while (1) {...} or for (;;) {...}

чего тему то создал
есть такой нихрена непонятный код, хотелось бы разобраться... хоть пихните в нужную сторону.
автор проверял компиляторы на "что то" ), не люблю чувствовать себя идиотом, а тут как раз тот случай ) 

#include <stdint.h>

#define NULL (0)

typedef double          f64;
typedef float           f32;
typedef uint64_t        u64;
typedef int64_t         i64;
typedef uint32_t        u32;
typedef int32_t         i32;
typedef uint16_t        u16;
typedef int16_t         i16;
typedef uint8_t         u8;
typedef int8_t          i8;


typedef i64             m3reg_t;
typedef void /*const*/ *                    code_t;
typedef code_t const * /*__restrict__*/        pc_t;
typedef const void *            m3ret_t;

#     define vectorcall

#    define d_m3OpSig                 pc_t _pc, u64 * _sp, u8 * _mem, m3reg_t _r0, f64 _fp0
#    define d_m3OpArgs                _sp, _mem, _r0, _fp0
#    define d_m3OpAllArgs             _pc, _sp, _mem, _r0, _fp0
#    define d_m3OpDefaultArgs         666, 666.0

typedef m3ret_t (vectorcall * IM3Operation) (d_m3OpSig);

# define immediate(TYPE)             * ((TYPE *) _pc++)
# define slot(TYPE)                  * (TYPE *) (_sp + immediate (i32))


# define d_m3RetSig                  static inline m3ret_t vectorcall
# define d_m3Op(NAME)                d_m3RetSig op_##NAME (d_m3OpSig)


# define nextOp()                    ((IM3Operation)(* _pc))(_pc + 1, d_m3OpArgs)


#define d_m3CommutativeOpMacro(RES, REG, TYPE, NAME, OP, ...) \
d_m3Op(TYPE##_##NAME##_sr)                                \
{                                                         \
    TYPE * stack = (TYPE *) (_sp + immediate (i32));      \
    OP((RES), (* stack), ((TYPE) REG), ##__VA_ARGS__);    \
    return nextOp ();                                     \
}                                                         \
d_m3Op(TYPE##_##NAME##_ss)                                \
{                                                         \
    TYPE * stackB = (TYPE *) (_sp + immediate (i32));     \
    TYPE * stackA = (TYPE *) (_sp + immediate (i32));     \
    OP((RES), (* stackA), (* stackB), ##__VA_ARGS__);     \
    return nextOp ();                                     \
}

#define d_m3OpMacro(RES, REG, TYPE, NAME, OP, ...)        \
d_m3Op(TYPE##_##NAME##_rs)                                \
{                                                         \
    TYPE * stack = (TYPE *) (_sp + immediate (i32));      \
    OP((RES), (* stack), ((TYPE) REG), ##__VA_ARGS__);    \
    return nextOp ();                                     \
}                                                         \
d_m3CommutativeOpMacro(RES, REG, TYPE,NAME, OP, ##__VA_ARGS__)

// Accept macros
#define d_m3CommutativeOpMacro_i(TYPE, NAME, MACRO, ...)     d_m3CommutativeOpMacro    ( _r0,  _r0, TYPE, NAME, MACRO, ##__VA_ARGS__)
#define d_m3OpMacro_i(TYPE, NAME, MACRO, ...)                d_m3OpMacro                ( _r0,  _r0, TYPE, NAME, MACRO, ##__VA_ARGS__)
#define d_m3CommutativeOpMacro_f(TYPE, NAME, MACRO, ...)     d_m3CommutativeOpMacro    (_fp0, _fp0, TYPE, NAME, MACRO, ##__VA_ARGS__)
#define d_m3OpMacro_f(TYPE, NAME, MACRO, ...)                d_m3OpMacro                (_fp0, _fp0, TYPE, NAME, MACRO, ##__VA_ARGS__)

#define M3_FUNC(RES, A, B, OP)  (RES) = OP((A), (B))    // Accept functions: res = OP(a,b)
#define M3_OPER(RES, A, B, OP)  (RES) = ((A) OP (B))    // Accept operators: res = a OP b

#define d_m3CommutativeOpFunc_i(TYPE, NAME, OP)     d_m3CommutativeOpMacro_i    (TYPE, NAME, M3_FUNC, OP)
#define d_m3OpFunc_i(TYPE, NAME, OP)                d_m3OpMacro_i                (TYPE, NAME, M3_FUNC, OP)
#define d_m3CommutativeOpFunc_f(TYPE, NAME, OP)     d_m3CommutativeOpMacro_f    (TYPE, NAME, M3_FUNC, OP)
#define d_m3OpFunc_f(TYPE, NAME, OP)                d_m3OpMacro_f                (TYPE, NAME, M3_FUNC, OP)

#define d_m3CommutativeOp_i(TYPE, NAME, OP)         d_m3CommutativeOpMacro_i    (TYPE, NAME, M3_OPER, OP)
#define d_m3Op_i(TYPE, NAME, OP)                    d_m3OpMacro_i                (TYPE, NAME, M3_OPER, OP)
#define d_m3CommutativeOp_f(TYPE, NAME, OP)         d_m3CommutativeOpMacro_f    (TYPE, NAME, M3_OPER, OP)
#define d_m3Op_f(TYPE, NAME, OP)                    d_m3OpMacro_f                (TYPE, NAME, M3_OPER, OP)


d_m3CommutativeOp_i (i32, Equal,                        ==)
d_m3CommutativeOp_i (i64, Equal,                        ==)
d_m3Op_i (i32, NotEqual,                    !=)
d_m3Op_i (i64, NotEqual,                    !=)


typedef struct M3OpInfo
{
    IM3Operation            operation_sr;        // top operand in register
    IM3Operation            operation_rs;        // top operand in stack
    IM3Operation            operation_ss;        // both operands in stack
}
M3OpInfo;

#define d_emptyOpList() NULL, NULL, NULL
#define d_unaryOpList(TYPE, NAME) op_##TYPE##_##NAME##_r, op_##TYPE##_##NAME##_s, NULL
#define d_binOpList(TYPE, NAME) op_##TYPE##_##NAME##_sr, op_##TYPE##_##NAME##_rs, op_##TYPE##_##NAME##_ss
#define d_commutativeBinOpList(TYPE, NAME) op_##TYPE##_##NAME##_sr, NULL, op_##TYPE##_##NAME##_ss


const M3OpInfo c_operations[] = {
    { d_commutativeBinOpList (i32, Equal) },
    { d_binOpList (i32, NotEqual) },
    { d_commutativeBinOpList (i64, Equal) },
    { d_binOpList (i64, NotEqual) },
};

add,  пример сборки

# gcc - xtensa

export PATH=~/.platformio/packages/toolchain-xtensa/bin/:$PATH
xtensa-lx106-elf-gcc $FLAGS -S ops.c -o esp8266.S

export PATH=~/.platformio/packages/toolchain-xtensa32/bin/:$PATH
xtensa-esp32-elf-gcc $FLAGS -S ops.c -o esp32.S

Редактировался NoName (2019-11-06 16:18:35)

#13 2019-11-06 17:04:09

Watchdog
Гость

Re: while (1) {...} or for (;;) {...}

Возможно, это описания форматов Машинных Инструкций для какой-то программы. lol Не заморачивайтесь, это никому сразу не понятно. Любой программе предшествует теория, алгоритмы и технологиия, без осведомленности в которых баран на новых воротах больше разглядит.

#14 2019-11-06 20:57:33

Avazart
Участник
Зарегистрирован: 2019-05-05
Сообщений: 181

Re: while (1) {...} or for (;;) {...}

typedef double          f64;
typedef float           f32;
typedef uint64_t        u64;

Так как в С/С++ размер double,float и прочего может зависеть от платформы на которой используется тут пытаются упростить себе работу на случай смены платформы заведением псевдонимов, т.е. если такое понадобится они просто поправят эти дефайны на другие типы, остальной код не нужно будет править.

Все остальное куда тяжелее понять так как зависит от предметной области. Но по сути это макросы призванные сократить/упростить код, придать осмысленности коду (код что часто используется, повторяется)

Редактировался Avazart (2019-11-06 21:03:48)

#15 2019-11-18 23:02:36

Mishka
Участник
Зарегистрирован: 2019-11-18
Сообщений: 44

Re: while (1) {...} or for (;;) {...}

С точки зрения современного компилятора нет разницы. Пенсионеры используют for (;;), но while (1) тоже популярен.

#16 2019-11-18 23:14:44

Watchdog
Гость

Re: while (1) {...} or for (;;) {...}

always: goto always;  /* Юноша! */

#17 2019-11-19 09:49:00

Mishka
Участник
Зарегистрирован: 2019-11-18
Сообщений: 44

Re: while (1) {...} or for (;;) {...}

Watchdog пишет:
always: goto always;  /* Юноша! */

Мешок картошки этому хлопцу!

#18 2019-12-15 00:32:10

Konstantin
Гость

Re: while (1) {...} or for (;;) {...}

оператор goto - моветон.

#19 2019-12-15 08:26:03

Watchdog
Гость

Re: while (1) {...} or for (;;) {...}

Konstantin пишет:

оператор goto - моветон.

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

#20 2019-12-15 12:09:01

Konstantin
Гость

Re: while (1) {...} or for (;;) {...}

Так я и не говорю, что его нужно прибить.
Сам изредка пользую....
Испытывая при этом великие душевные терзания.  smile

#21 2019-12-15 13:16:45

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 347

Re: while (1) {...} or for (;;) {...}

Konstantin пишет:

Испытывая при этом великие душевные терзания

А чё так?

#22 2019-12-15 13:24:47

Konstantin
Гость

Re: while (1) {...} or for (;;) {...}

дык говорил же

Konstantin пишет:

оператор goto - моветон.

#23 2019-12-15 13:36:29

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 347

Re: while (1) {...} or for (;;) {...}

Ну, вот я и спрашиваю "чё так?".

Для Кнута не моветон, а для тебя - моветон.

Или Кнут ни хрена в программировании не рубит?

#24 2019-12-16 19:37:07

Avazart
Участник
Зарегистрирован: 2019-05-05
Сообщений: 181

Re: while (1) {...} or for (;;) {...}

Watchdog пишет:
Konstantin пишет:

оператор goto - моветон.

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

Так в Java его и нет.

Kaka пишет:

Ну, вот я и спрашиваю "чё так?".

Для Кнута не моветон, а для тебя - моветон.

Или Кнут ни хрена в программировании не рубит?

А вот у Дейкстры другое мнение на этот счет.

Если же для "бесконечных" циклов Вы используете goto Вы либо ненормальный садист или же просто знатный выпендрёжник.

Редактировался Avazart (2019-12-16 19:44:04)

#25 2019-12-16 19:48:02

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 347

Re: while (1) {...} or for (;;) {...}

Avazart пишет:

Так в Java его и нет.

Зато break и continue с метками - намного "структурнее" smile

Avazart пишет:

А вот у Дейкстры другое мнение на этот счет.

А кто такой Дейкстра рядом с Кнутом? даже не смешно.

Avazart пишет:

Если же для бесконечных циклов Вы используете goto

Я где-то говорил, что я так поступаю? Ткните носом, пожалуйста.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела