
arisu
03.03.2017
19:49:01

Sergey
03.03.2017
19:49:04
больше одной точки следования

Eldar
03.03.2017
19:49:04

Sergey
03.03.2017
19:49:18

Google

Aragaer
03.03.2017
19:49:29
во-первых, не всякий лексер это распарсит

arisu
03.03.2017
19:49:32

Eldar
03.03.2017
19:49:38

Sergey
03.03.2017
19:49:43
извините, облажался

Eldar
03.03.2017
19:50:05
так-то!

arisu
03.03.2017
19:50:15
впрочем, от этого только хуже

Sergey
03.03.2017
19:50:23
есть statements
это тебе не expressions

arisu
03.03.2017
19:50:33
язык настолько плох, что даже не формализован до конца

Google

Aragaer
03.03.2017
19:51:15
$ cat test.c
i;main(){return i++ + ++i;}
$ ./test; echo $?
2

Sergey
03.03.2017
19:51:15
чёт слишком громко звучит

Марк
03.03.2017
19:51:30
Статик структ - это функции получаются, верно?

arisu
03.03.2017
19:51:57
ладно
другой вопрос

Aragaer
03.03.2017
19:52:01
нет

Sergey
03.03.2017
19:52:08

Aragaer
03.03.2017
19:52:36
static это модификатор области видимости функции

arisu
03.03.2017
19:52:41
зачем нужно два оператора доступа к полям, если можно на этапе компиляции решить, где и какой используется?

Aragaer
03.03.2017
19:52:53
какие два?

Sergey
03.03.2017
19:53:01
в Си, если не сделать typedef struct blah_s blah_t, то придётся писать struct blah_s всегда

Aragaer
03.03.2017
19:53:02
точка и стрелка?

arisu
03.03.2017
19:53:04
-> и .

Sergey
03.03.2017
19:53:14

arisu
03.03.2017
19:53:25

Aragaer
03.03.2017
19:53:33
ну стрелка для указателей, точка для структур. Можно писать (*my_struct).field же
но со стрелкой получается симпатичнее

Sergey
03.03.2017
19:53:44

arisu
03.03.2017
19:54:02
на этапе компиляции можно определить, где нужен доступ с разыменованием
а в коде использовать один общий оператор

Google

Sergey
03.03.2017
19:54:23
ннннет

arisu
03.03.2017
19:54:46
я готов поспорить, что НИКТО в мире не пытался использовать структуру как указатель на что-то, и наоборот

Sergey
03.03.2017
19:54:48
ptr->field

arisu
03.03.2017
19:54:51
потому что это бессмыслено

Aragaer
03.03.2017
19:54:55
точка для структур, стрелка для указателей и не надо их путать 8)

Sergey
03.03.2017
19:55:07

Denis
03.03.2017
19:55:16
Такс такс такс што тут у нас в 3.7 указатели добавили?

Aragaer
03.03.2017
19:55:21
я думаю, через юнионы можно сделать какую-нибудь гадость

arisu
03.03.2017
19:55:23
есть код

Sergey
03.03.2017
19:55:35

arisu
03.03.2017
19:55:43
struct A;
struct *B;

arisu
03.03.2017
19:55:52
если ты попытаешься сделать A->field
это будет бессмысленно
и если попытаешься сделать B.field

Aragaer
03.03.2017
19:56:09
могло бы, но зачем усложнять логику, если можно иметь два оператора 8)

arisu
03.03.2017
19:56:10
это будет настолько же бессмысленно

Aragaer
03.03.2017
19:56:12
С простой.
В нем нет никакой магии под капотом и это замечательно

Sergey
03.03.2017
19:56:31
потому что explicit

Google

arisu
03.03.2017
19:56:42
оба оператора можно свести к одному, а применяемую операцию резолвить на этапе компиляции

Sergey
03.03.2017
19:56:48
ты точно знаешь, что тут поинтер, и что он не разыменовывается

arisu
03.03.2017
19:57:00
это грязь

Sergey
03.03.2017
19:57:01
null_ptr.asd

arisu
03.03.2017
19:57:03
в языке

Sergey
03.03.2017
19:57:04
*sigh*

arisu
03.03.2017
19:57:17
давай еще

Aragaer
03.03.2017
19:57:18
впрочем...

Sergey
03.03.2017
19:57:38
в таком случае в питоне self грязь

Admin
ERROR: S client not available

arisu
03.03.2017
19:57:40
int main();
int main(int argc, char**argv);
какой прототип верный, и почему?

Aragaer
03.03.2017
19:57:47
int (*func());
можно вызывать как func(), а можно как (*func)()

Sergey
03.03.2017
19:57:51

Aragaer
03.03.2017
19:57:56
оба верные

arisu
03.03.2017
19:58:02

Aragaer
03.03.2017
19:58:03
main() тоже верный. Без инт

Sergey
03.03.2017
19:58:03

arisu
03.03.2017
19:58:07
а вот точка в нем одна

Aragaer
03.03.2017
19:58:09
нет, это указатель

Google

Sergey
03.03.2017
19:58:15

arisu
03.03.2017
19:58:19
потому что это единственный оператор для доступа к атрибутам

Sergey
03.03.2017
19:58:30
зачем?

arisu
03.03.2017
19:58:46

Sergey
03.03.2017
19:58:47
в c++ можно не писать, навпример

Aragaer
03.03.2017
19:58:54
func = func1; func(); func = func2; (*func)();

Sergey
03.03.2017
19:58:55

arisu
03.03.2017
19:59:12
мусор - это когда одна операция делается двумя операторами

Aragaer
03.03.2017
19:59:14
не алиас, а честный указатель

arisu
03.03.2017
19:59:22
а не когда явно указано пространство имен)

Aragaer
03.03.2017
19:59:26
операции все-таки разные

arisu
03.03.2017
19:59:42
а в крестах даже три
-> . и ::
и все делают одно и то же

Aragaer
03.03.2017
20:00:03
и кстати, по мне опять же лучше, когда компилятор скажет "Э, тут не указатель, посмотри внимательнее" вместо того, чтобы молча зохавать структуру

Sergey
03.03.2017
20:00:26
это namespace

arisu
03.03.2017
20:01:25
разница между :: и . например в том, что оба оператора обращаются к именам в одном и том же пространстве имен (класс), но предполагают разные модификаторы у этих имен (auto и static)