Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
Artem Chuprina r...@ran.pp.ru writes: Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 01:45:56 +0400: DK Оказывается, можно объявлять структуры, не объявляя их поля. Я в DK шоке. Оказывается, заголовки можно писать вот так: DK -- my-objects.h --

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 10:23:55 +0400: DK Оказывается, можно объявлять структуры, не объявляя их поля. Я в DK шоке. Оказывается, заголовки можно писать вот так: DK -- my-objects.h -- struct my_object; struct

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
Artem Chuprina r...@ran.pp.ru writes: Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 10:23:55 +0400: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Incomplete-Types DK Спасибо, Артём. Не дочитал, поторопился. =( DK Кстати, здесь что-то непонятное с

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: Ну, если Вы это найдёте ещё и у Кернигана-Ритчи, то я совсем со стыда сгорю, ибо в отличие от gnu-c-manual этих ребят я читал от корки до корки несколько раз. =) Kernighan Brian W, Ritchie Dennis M. The ANSI C programming language second edition

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: Хотя в наше время по Кернигану и Ричи учить C уже не очень хорошо, уж очень там много давно снятых ограничений. А я все еще рекомендую... Какие ограничения, вы имеете в виду, если не секрет? Была старая книга (1-st edition), но потом ведь

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, Dmitrii Kashin wrote: Ну, если Вы это найдёте ещё и у Кернигана-Ритчи, то я совсем со стыда сгорю, ибо в отличие от gnu-c-manual этих ребят я читал от корки до корки несколько раз. =) Kernighan Brian W, Ritchie Dennis M. The ANSI C

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 11:18:35 +0400: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Incomplete-Types DK Спасибо, Артём. Не дочитал, поторопился. =( DK Кстати, здесь что-то непонятное с терминологией: You can *define*

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: Как бы это сказать помягче, что я в очередной раз удивился, потратил время, открыл книжку, перечитал, и снова ничего не нашёл? For example, given the declaration of point above, struct point pt; defines a variable pt which is a

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 12:29:15 +0400 (MSK): Хотя в наше время по Кернигану и Ричи учить C уже не очень хорошо, уж очень там много давно снятых ограничений. y А я все еще рекомендую... y Какие ограничения, вы имеете в виду, если

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 12:16:35 +0400 (MSK): y p.s. Вообще-то надо понимать, что декларация (объявление) - y это всего лишь сообщение компилятору, что такой объект существует. y Ну сообщили, что структура где-то определена, но

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 01:45:56 +0400: DK Оказывается, можно объявлять структуры, не объявляя их поля. Я в DK шоке. Тоже мне, шок. Хочешь шока - скажи grep -rl 'define *errno' /usr/include потом залезь в тот файл, где оно определяется (это

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, Dmitrii Kashin wrote: Как бы это сказать помягче, что я в очередной раз удивился, потратил время, открыл книжку, перечитал, и снова ничего не нашёл? For example, given the declaration of point above, struct point pt;

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
Artem Chuprina r...@ran.pp.ru writes: Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 01:45:56 +0400: DK Оказывается, можно объявлять структуры, не объявляя их поля. Я в DK шоке. Тоже мне, шок. Хочешь шока - скажи grep -rl 'define *errno' /usr/include потом

Re: Чёртов язык Си!

2014-10-07 Пенетрантность dm.fedorov
7 октября 2014 г., 17:04 пользователь Dmitrii Kashin free...@freehck.ru написал: Artem Chuprina r...@ran.pp.ru writes: extern int *__errno_location (void) __THROW __attribute__ ((__const__)); Что это такое? ^^^ __THROW - макрос для плюсов,

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 12:16:35 +0400 (MSK): y p.s. Вообще-то надо понимать, что декларация (объявление) - y это всего лишь сообщение компилятору, что такой объект существует. y Ну сообщили,

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 14:15:27 +0400 (MSK): y p.s. Вообще-то надо понимать, что декларация (объявление) - y это всего лишь сообщение компилятору, что такой объект существует. y Ну сообщили, что структура где-то определена, но

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 14:04:30 +0400: DK Оказывается, можно объявлять структуры, не объявляя их поля. Я в DK шоке. Тоже мне, шок. Хочешь шока - скажи grep -rl 'define *errno' /usr/include потом залезь в тот файл, где оно

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 12:49:03 +0400 (MSK): Как бы это сказать помягче, что я в очередной раз удивился, потратил время, открыл книжку, перечитал, и снова ничего не нашёл? y For example, given the declaration of point above, y

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 14:15:27 +0400 (MSK): y Ну да, не такой умный, но _это_ я понимаю.) y В этом контексте слово структура совсем не важно. y Указатель он и в Африке указатель. Слово структура - это единственный способ в C сделать

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Alexander Galanin
On Tue, 07 Oct 2014 14:22:54 +0400 Artem Chuprina r...@ran.pp.ru wrote: Надо сказать, что мне в моей довольно богатой программистской практике ни разу не пришлось воспользоваться функцией с аргументом типа массив... int utimes(const char *path, const struct timeval times[2]); :) --

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
Artem Chuprina r...@ran.pp.ru writes: Dmitrii Kashin - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 14:04:30 +0400: DK Да, кстати, я уже давно хотел кому-нибудь признаться, что со чтением DK библиотек stl у меня есть некоторые проблемы. Вот например: Это, кстати, никаким боком не

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: Фишка в том, что можно написать в заголовке: -- point.h -- struct point; struct point* point_constructor(); int point2number(struct point* p); - А, понял. Это называется предварительное объявление

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Alexander Galanin - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 14:38:19 +0400: Надо сказать, что мне в моей довольно богатой программистской практике ни разу не пришлось воспользоваться функцией с аргументом типа массив... AG int AG utimes(const char *path, const struct timeval

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 14:15:27 +0400 (MSK): y В этом случае нельзя передавать массивы: y void f(struct S a[]) == void f(struct S* a) y так как sizeof(struct S) может поменяться. y Даже без

Re: Чёртов язык Си!

2014-10-07 Пенетрантность dm.fedorov
7 октября 2014 г., 18:45 пользователь yuri.nefe...@gmail.com написал: А вот если sizeof будет вызываться во время выполнения, Не бывает.

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 15:16:13 +0400 (MSK): Фишка в том, что можно написать в заголовке: -- point.h -- struct point; struct point* point_constructor(); int point2number(struct point* p);

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: В С нет разницы между void f(struct S a[]) и void f(struct S *a) - компилятору это всё равно. Моё беспокойство было, как будет обрабатываться a[i] или, что то же самое *(a+i). Как компилятор предотвратит использование такой конструкции? Если Вы хотите

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, dm.fedorov wrote: 7 октября 2014 г., 18:45 пользователь yuri.nefe...@gmail.com написал: А вот если sizeof будет вызываться во время выполнения, Не бывает. Я бы не был бы так уверен ) #include stdio.h void print_size(int n){ printf(

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 15:45:51 +0400 (MSK): y В этом случае нельзя передавать массивы: y void f(struct S a[]) == void f(struct S* a) y так как sizeof(struct S) может поменяться. y Даже без обращения к полям. Да, но из

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, dm.fedorov wrote: 7 октября 2014 г., 18:45 пользователь yuri.nefe...@gmail.com написал: А вот если sizeof будет вызываться во время выполнения, Не бывает. Я бы не был бы так уверен ) ... printf( sizeof(int[%i])=

[OT] opaque pointer

2014-10-07 Пенетрантность Ivan Shmakov
AC == Artem Chuprina r...@ran.pp.ru writes: […] AC Называется этот прием непрозрачный указатель (opaque pointer), AC иногда говорят непрозрачная структура (opaque structure) и AC используется в хвост и в гриву, начиная с libc (FILE *). Зависит. Вот, к примеру, в [1] находим:

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
Ivan Shmakov - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 12:47:49 +: AC Называется этот прием непрозрачный указатель (opaque pointer), AC иногда говорят непрозрачная структура (opaque structure) и AC используется в хвост и в гриву, начиная с libc (FILE *). ISЗависит. Вот,

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Денис Ильин
 Коллеги, sizeof вычисляется во время компиляции. Всегда.Денис 07.10.2014, 17:45, "Artem Chuprina" r...@ran.pp.ru:Ivan Shmakov - debian-russian@lists.debian.org  @ Tue, 07 Oct 2014 12:47:49 +: AC Называется этот прием "непрозрачный указатель" (opaque pointer), AC иногда говорят "непрозрачная

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Денис Ильин
 Коллеги, sizeof вычисляется во время компиляции. Всегда.Денис 07.10.2014, 17:45, "Artem Chuprina" r...@ran.pp.ru:Ivan Shmakov - debian-russian@lists.debian.org  @ Tue, 07 Oct 2014 12:47:49 +: AC Называется этот прием "непрозрачный указатель" (opaque pointer), AC иногда говорят "непрозрачная

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: y В С нет разницы между void f(struct S a[]) и void f(struct S *a) y - компилятору это всё равно. y Моё беспокойство было, как будет обрабатываться a[i] или, что то же y самое *(a+i). Как компилятор предотвратит использование такой y конструкции?

Re: [OT] opaque pointer

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Денис Ильин wrote:  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис   Почему? В любом компиляторе? Факт состоит в том, что стандарт языка С не определяет этого = это просто практические наблюдения. Ю.

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, Artem Chuprina wrote: y В С нет разницы между void f(struct S a[]) и void f(struct S *a) y - компилятору это всё равно. y Моё беспокойство было, как будет обрабатываться a[i] или, что то же y самое *(a+i). Как компилятор предотвратит

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Dmitrii Kashin
yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, Денис Ильин wrote:  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис Почему? В любом компиляторе? Ну, как тебе сказать... Эта штука принимает в качестве параметра _тип_. Поскольку с символами язык Си работать не умеет,

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, dm.fedorov wrote: 7 октября 2014 г., 18:45 пользователь yuri.nefe...@gmail.com написал: А вот если sizeof будет вызываться во время выполнения, Не бывает. Я бы не был бы так уверен ) ...

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: yuri.nefe...@gmail.com writes: Тогда похоже, что между указателями на incomplete type и void* вообще нет никакой разницы. Тем более что и преобразования типа void* - struct* будут выполнятся молча, даже без предупреждений. Просто это «сахар» для

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
Денис Ильин - Artem Chuprina @ Tue, 07 Oct 2014 18:01:30 +0400: ДИ  Коллеги, sizeof вычисляется во время компиляции. Всегда. Коллега, а никак нельзя сделать так, чтобы Ваши письма НЕ приходили 1) в ответ на то письмо, к которому они не относятся (хотя и относятся к той же теме дискуссии);

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 18:16:32 +0400 (MSK): y В С нет разницы между void f(struct S a[]) и void f(struct S *a) y - компилятору это всё равно. y Моё беспокойство было, как будет обрабатываться a[i] или, что то же y самое *(a+i).

Re: [OT] opaque pointer

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Dmitrii Kashin wrote: yuri.nefe...@gmail.com writes: On Tue, 7 Oct 2014, Денис Ильин wrote:  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис Почему? В любом компиляторе? Ну, как тебе сказать... Эта штука принимает в качестве параметра _тип_.

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Ivan Shmakov
AC == Artem Chuprina r...@ran.pp.ru writes: Ivan Shmakov - debian-russian@lists.debian.org: […] IS Что как бы намекает на то, что FILE отнюдь не opaque. AC Как минимум, используется он как opaque. Хотя на практике он, AC скорее всего, тоже уже устоялся, не менялся дцать лет, и может быть

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Alexander Galanin
On Tue, 07 Oct 2014 15:37:42 +0400 Artem Chuprina r...@ran.pp.ru wrote: предыдущая из того же мана, struct utimbuf, выглядит стремновато... (Я так понимаю, с ней идея та же - ее надо создать и заполнить снаружи библиотеки.) Входящий в нее time_t имеет весьма неплохие шансы внезапно вырасти

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
Ivan Shmakov - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 17:15:44 +: IS Что как бы намекает на то, что FILE отнюдь не opaque. AC Как минимум, используется он как opaque. Хотя на практике он, AC скорее всего, тоже уже устоялся, не менялся дцать лет, и может быть AC доступен

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 21:13:08 +0400 (MSK):  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис Почему? В любом компиляторе? Ну, как тебе сказать... Эта штука принимает в качестве параметра _тип_. Поскольку с

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 18:16:32 +0400 (MSK): y В С нет разницы между void f(struct S a[]) и void f(struct S *a) y - компилятору это всё равно. y Моё беспокойство было, как будет

Re: [OT] opaque pointer

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: y Что-то я вас не понимаю (с). y Сами же написали: «sizeof(int[n]) преобразуется в нечто y вроде n*sizeof(int)». Это n* и выполняется в run time. n* - да, а sizeof - нет. С чем ты споришь? Еще раз: int temp[n]; sizeof(temp);

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
Alexander Galanin - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 21:31:33 +0400: предыдущая из того же мана, struct utimbuf, выглядит стремновато... (Я так понимаю, с ней идея та же - ее надо создать и заполнить снаружи библиотеки.) Входящий в нее time_t имеет весьма неплохие шансы

Re: [OT] opaque pointer

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Ivan Shmakov wrote: Смысл в том, что «непрозрачные указатели» C плохо совмещаются с такими средствами языка, как inline и #define. Вроде бы для inline должно все работать при правильном описании [1]. При вызова из другого файла будет работать как обычная

[OT] FILE_OFFSET_BITS

2014-10-07 Пенетрантность Ivan Shmakov
Alexander Galanin a...@galanin.nnov.ru writes: […] Что же до _t-типов, я недавно натыкался на линковку с двумя библиотеками, у которых различается FILE_OFFSET_BITS. Потому size_t были разного размера. Что-то я не пойму, — какое отношение FILE_OFFSET_BITS имеет именно к

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Ivan Shmakov
AC == Artem Chuprina r...@ran.pp.ru writes: Ivan Shmakov - debian-russian@lists.debian.org: […] AC Но тем не менее, в _API_ libc определения FILE нет. IS Да, но это свойство документации, — не языка. AC Не библиотеки, скажем так. Это, гм, намек: если вы раскопали в AC хедерах

Re: Чёртов язык Си!

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 22:14:17 +0400 (MSK): y Возвращаясь же к примеру, мое предложение было написать что-то типа ytypedef void* struct_S_ptr; y и вызывать yf((struct_S_ptr)0); y И предупреждений не будет и читаемость

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 22:24:02 +0400 (MSK): y Что-то я вас не понимаю (с). y Сами же написали: «sizeof(int[n]) преобразуется в нечто y вроде n*sizeof(int)». Это n* и выполняется в run time. n* - да, а sizeof - нет. С чем ты

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 23:03:24 +0400 (MSK): Смысл в том, что «непрозрачные указатели» C плохо совмещаются с такими средствами языка, как inline и #define. y Вроде бы для inline должно все работать при правильном описании [1].

Re: [OT] opaque pointer

2014-10-07 Пенетрантность Artem Chuprina
Ivan Shmakov - debian-russian@lists.debian.org @ Tue, 07 Oct 2014 19:05:53 +: IS Недокументированные типы, функции, переменные, etc. — возможны IS совершенно в любой среде программирования. В отличие от IS «непрозрачных». AC Начнем с того, что функции, типы и переменные, как AC

Re: Чёртов язык Си!

2014-10-07 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Artem Chuprina wrote: yuri.nefe...@gmail.com - debian-russian@lists.debian.org @ Tue, 7 Oct 2014 22:14:17 +0400 (MSK): y Возвращаясь же к примеру, мое предложение было написать что-то типа ytypedef void* struct_S_ptr; y и вызывать yf((struct_S_ptr)0); y И

Re: [OT] opaque pointer

2014-10-07 Пенетрантность yuri . nefedov
On Wed, 8 Oct 2014, Artem Chuprina wrote: Впрочем, по сути это тот же самый хак, который позволяет void f (int n) { something var[n]; } Почему же хак? Variable length array входят в стандарт С99. Ю.