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. Ю.

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> Возвращаясь же к примеру, мое предложение было написать что-то типа y>typedef void* struct_S_ptr; y> и вызывать y>f((struct_S_ptr)0); y> И

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>> Начнем с того, что функции, типы и переменные, как

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 должно все работать при правильном описании [

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: Чёртов язык Си!

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

Re: [OT] opaque pointer

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

[OT] FILE_OFFSET_BITS

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

Re: [OT] opaque pointer

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

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, Artem Chuprina wrote: y> Что-то я вас не понимаю (с). y> Сами же написали: «sizeof(int[n]) преобразуется в нечто y> вроде n*sizeof(int)». Это n* и выполняется в run time. n* - да, а sizeof - нет. С чем ты споришь? Еще раз: int temp[n]; sizeof(temp); 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 Пенетрантность Artem Chuprina
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014 21:13:08 +0400 (MSK):  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис >>> >>> Почему? В любом компиляторе? >> >> Ну, как тебе сказать... Эта штука принимает в качестве параметра >>

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: Чёртов язык Си!

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

Re: [OT] opaque pointer

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

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: Чёртов язык Си!

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> сам

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

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 пользователь написал: А вот если sizeof будет вызываться во время выполнения, Не бывает. Я бы не был бы так уверен ) ... printf(" sizeof(int[%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 Пенетрантность 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 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, Денис Ильин wrote:  Коллеги, sizeof вычисляется во время компиляции. Всегда. Денис   Почему? В любом компиляторе? Факт состоит в том, что стандарт языка С не определяет этого => это просто практические наблюдения. Ю.

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 Пенетрантность Денис Ильин
 Коллеги, sizeof вычисляется во время компиляции. Всегда.Денис 07.10.2014, 17:45, "Artem Chuprina" :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" :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 Пенетрантность 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>Зав

[OT] opaque pointer

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

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

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

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 Пенетрантность yuri . nefedov
On Tue, 7 Oct 2014, dm.fedorov wrote: 7 октября 2014 г., 18:45 пользователь написал: А вот если sizeof будет вызываться во время выполнения, Не бывает. Я бы не был бы так уверен ) #include void print_size(int n){ printf(" sizeof(int[%i])= %lu\n",n,siz

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 Пенетрантность 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 Пенетрантность dm.fedorov
7 октября 2014 г., 18:45 пользователь написал: > > А вот если 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 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 Пенетрантность 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 time

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); - А, понял. Это называется предварительное объявление (forward

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

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

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

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

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 Пенетрантность 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 abov

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 14:15:27 +0400 (MSK): >> y> p.s. Вообще-то надо понимать, что декларация (объявление) - >> y> это всего лишь сообщение компилятору, что такой объект существует. >> y> Ну сообщили, что структура где-то определена

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 Пенетрантность dm.fedorov
7 октября 2014 г., 17:04 пользователь Dmitrii Kashin написал: > Artem Chuprina writes: > > extern int *__errno_location (void) __THROW __attribute__ ((__const__)); > Что это такое? >^^^ __THROW - макрос для плюсов, разворачивающийся throw() (фу

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

2014-10-07 Пенетрантность Dmitrii Kashin
Artem Chuprina 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 Пенетрантность 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

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 Пенетрантность 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
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 Пенетрантность 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 structure

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> Кстати, здесь что-то непонятное с терминологией: "Yo

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

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

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

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 Пенетрантность Dmitrii Kashin
Artem Chuprina 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> Кстати, здесь что-то непонятное с