#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
Повідомлень: 411

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

NoName пише:

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

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

Неактивний

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

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

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
Повідомлень: 411

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
Повідомлень: 93

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
Повідомлень: 93

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
Повідомлень: 411

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
Повідомлень: 411

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
Повідомлень: 411

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

Avazart пише:

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

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

Avazart пише:

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

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

Avazart пише:

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

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

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму