On Wed, 8 Oct 2014, Artem Chuprina wrote:
Впрочем, по сути это тот же самый хак, который позволяет
void f (int n) {
something var[n];
}
Почему же хак? Variable length array входят в стандарт С99.
Ю.
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> И
Ivan Shmakov -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014 19:05:53
+:
IS>> Недокументированные типы, функции, переменные, etc. — возможны
IS>> совершенно в любой среде программирования. В отличие от
IS>> «непрозрачных».
AC>> Начнем с того, что функции, типы и переменные, как
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
23:03:24 +0400 (MSK):
>> Смысл в том, что «непрозрачные указатели» C плохо совмещаются с
>> такими средствами языка, как inline и #define.
y> Вроде бы для inline должно все работать при правильном описании [
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 - нет
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> И предупреждений не будет и читаемость со
> "AC" == Artem Chuprina writes:
> Ivan Shmakov -> debian-russian@lists.debian.org:
[…]
AC> Но тем не менее, в _API_ libc определения FILE нет.
IS> Да, но это свойство документации, — не языка.
AC> Не библиотеки, скажем так. Это, гм, намек: если вы раскопали в
AC> хедерах определе
> Alexander Galanin writes:
[…]
> Что же до _t-типов, я недавно натыкался на линковку с двумя
> библиотеками, у которых различается FILE_OFFSET_BITS. Потому size_t
> были разного размера.
Что-то я не пойму, — какое отношение FILE_OFFSET_BITS имеет
именно к size_t? (Прот
On Tue, 7 Oct 2014, Ivan Shmakov wrote:
Смысл в том, что «непрозрачные указатели» C плохо совмещаются с
такими средствами языка, как inline и #define.
Вроде бы для inline должно все работать при правильном описании [1].
При вызова из другого файла будет работать как обычная
Alexander Galanin -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
21:31:33 +0400:
>> предыдущая из того же мана, struct utimbuf, выглядит стремновато... (Я
>> так понимаю, с ней идея та же - ее надо создать и заполнить снаружи
>> библиотеки.) Входящий в нее time_t имеет весьма неплохие
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
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> Моё беспокойство было, как будет обра
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
21:13:08 +0400 (MSK):
Коллеги, sizeof вычисляется во время компиляции. Всегда.
Денис
>>>
>>> Почему? В любом компиляторе?
>>
>> Ну, как тебе сказать... Эта штука принимает в качестве параметра
>>
Ivan Shmakov -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014 17:15:44
+:
IS>> Что как бы намекает на то, что FILE отнюдь не opaque.
AC>> Как минимум, используется он как opaque. Хотя на практике он,
AC>> скорее всего, тоже уже устоялся, не менялся дцать лет, и может быть
AC>> дос
On Tue, 07 Oct 2014 15:37:42 +0400
Artem Chuprina wrote:
> предыдущая из того же мана, struct utimbuf, выглядит стремновато... (Я
> так понимаю, с ней идея та же - ее надо создать и заполнить снаружи
> библиотеки.) Входящий в нее time_t имеет весьма неплохие шансы внезапно
> вырасти в размере..
> "AC" == Artem Chuprina writes:
> Ivan Shmakov -> debian-russian@lists.debian.org:
[…]
IS> Что как бы намекает на то, что FILE отнюдь не opaque.
AC> Как минимум, используется он как opaque. Хотя на практике он,
AC> скорее всего, тоже уже устоялся, не менялся дцать лет, и может быть
On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
yuri.nefe...@gmail.com writes:
On Tue, 7 Oct 2014, Денис Ильин wrote:
Коллеги, sizeof вычисляется во время компиляции. Всегда.
Денис
Почему? В любом компиляторе?
Ну, как тебе сказать... Эта штука принимает в качестве параметра
_тип_. Поскольку
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> сам
Денис Ильин -> Artem Chuprina @ Tue, 07 Oct 2014 18:01:30 +0400:
ДИ> Коллеги, sizeof вычисляется во время компиляции. Всегда.
Коллега, а никак нельзя сделать так, чтобы Ваши письма НЕ приходили
1) в ответ на то письмо, к которому они не относятся (хотя и относятся к той же
теме дискуссии);
On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
yuri.nefe...@gmail.com writes:
Тогда похоже, что между указателями на incomplete type и void*
вообще нет никакой разницы. Тем более что и преобразования
типа void* <-> struct* будут выполнятся молча, даже без
предупреждений. Просто это «сахар» для
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])=
yuri.nefe...@gmail.com writes:
> On Tue, 7 Oct 2014, Денис Ильин wrote:
>
>> Коллеги, sizeof вычисляется во время компиляции. Всегда.
>>
>> Денис
>
> Почему? В любом компиляторе?
Ну, как тебе сказать... Эта штука принимает в качестве параметра
_тип_. Поскольку с символами язык Си работать не ум
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). Как компилято
On Tue, 7 Oct 2014, Денис Ильин wrote:
Коллеги, sizeof вычисляется во время компиляции. Всегда.
Денис
Почему? В любом компиляторе?
Факт состоит в том, что стандарт языка С не определяет
этого => это просто практические наблюдения.
Ю.
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> конструк
Коллеги, 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>> иногда говорят "непрозрачная структура"
Коллеги, 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>> иногда говорят "непрозрачная структура"
Ivan Shmakov -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014 12:47:49
+:
AC>> Называется этот прием "непрозрачный указатель" (opaque pointer),
AC>> иногда говорят "непрозрачная структура" (opaque structure) и
AC>> используется в хвост и в гриву, начиная с libc (FILE *).
IS>Зав
> "AC" == Artem Chuprina writes:
[…]
AC> Называется этот прием "непрозрачный указатель" (opaque pointer),
AC> иногда говорят "непрозрачная структура" (opaque structure) и
AC> используется в хвост и в гриву, начиная с libc (FILE *).
Зависит. Вот, к примеру, в [1] находим:
> Fun
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]));
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> Даже без обращения к полям.
>
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
yuri.nefe...@gmail.com writes:
>
> В С нет разницы между void f(struct S a[]) и void f(struct S *a)
> - компилятору это всё равно.
>
> Моё беспокойство было, как будет обрабатываться a[i] или, что то же
> самое *(a+i). Как компилятор предотвратит использование такой
> конструкции?
Если Вы хо
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);
>> ---
7 октября 2014 г., 18:45 пользователь написал:
>
> А вот если sizeof будет вызываться во время выполнения,
Не бывает.
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> Даже бе
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
On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
Фишка в том, что можно написать в заголовке:
-- point.h --
struct point;
struct point* point_constructor();
int point2number(struct point* p);
-
А, понял. Это называется предварительное объявление
(forward
Artem Chuprina writes:
> Dmitrii Kashin -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014
> 14:04:30 +0400:
>
> DK> Да, кстати, я уже давно хотел кому-нибудь признаться, что со чтением
> DK> библиотек stl у меня есть некоторые проблемы. Вот например:
>
> Это, кстати, никаким боком не stl
On Tue, 07 Oct 2014 14:22:54 +0400
Artem Chuprina wrote:
> Надо сказать, что мне в моей довольно богатой программистской практике
> ни разу не пришлось воспользоваться функцией с аргументом типа массив...
int
utimes(const char *path, const struct timeval times[2]);
:)
--
Alexander Galanin
-
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
14:15:27 +0400 (MSK):
y> Ну да, не такой умный, но _это_ я понимаю.)
y> В этом контексте слово структура совсем не важно.
y> Указатель он и в Африке указатель.
Слово структура - это единственный способ в C сделать
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
Dmitrii Kashin -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014 14:04:30
+0400:
>> DK> Оказывается, можно объявлять структуры, не объявляя их поля. Я в
>> DK> шоке.
>>
>> Тоже мне, шок. Хочешь шока - скажи
>>
>> grep -rl 'define *errno' /usr/include
>>
>> потом залезь в тот файл,
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
14:15:27 +0400 (MSK):
>> y> p.s. Вообще-то надо понимать, что декларация (объявление) -
>> y> это всего лишь сообщение компилятору, что такой объект существует.
>> y> Ну сообщили, что структура где-то определена
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> Ну сообщили
7 октября 2014 г., 17:04 пользователь Dmitrii Kashin
написал:
> Artem Chuprina writes:
>
> extern int *__errno_location (void) __THROW __attribute__ ((__const__));
> Что это такое? >^^^
__THROW - макрос для плюсов, разворачивающийся throw()
(фу
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
>
> потом зале
yuri.nefe...@gmail.com writes:
> On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
>
>>
>> Как бы это сказать помягче, что я в очередной раз удивился, потратил
>> время, открыл книжку, перечитал, и снова ничего не нашёл?
>>
>>
>
> For example, given the declaration of point above,
> struct point
Dmitrii Kashin -> debian-russian@lists.debian.org @ Tue, 07 Oct 2014 01:45:56
+0400:
DK> Оказывается, можно объявлять структуры, не объявляя их поля. Я в
DK> шоке.
Тоже мне, шок. Хочешь шока - скажи
grep -rl 'define *errno' /usr/include
потом залезь в тот файл, где оно определяется (это бу
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
12:16:35 +0400 (MSK):
y> p.s. Вообще-то надо понимать, что декларация (объявление) -
y> это всего лишь сообщение компилятору, что такой объект существует.
y> Ну сообщили, что структура где-то определена, но пото
yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014
12:29:15 +0400 (MSK):
>> Хотя в наше время по Кернигану и Ричи учить
>> C уже не очень хорошо, уж очень там много давно снятых ограничений.
>>
y> А я все еще рекомендую...
y> Какие ограничения, вы имеете в виду
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
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
yuri.nefe...@gmail.com writes:
> On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
>
>> Ну, если Вы это найдёте ещё и у Кернигана-Ритчи, то я совсем со стыда
>> сгорю, ибо в отличие от gnu-c-manual этих ребят я читал от корки до
>> корки несколько раз. =)
>>
>
> Kernighan Brian W, Ritchie Dennis M. The
On Tue, 7 Oct 2014, Artem Chuprina wrote:
Хотя в наше время по Кернигану и Ричи учить
C уже не очень хорошо, уж очень там много давно снятых ограничений.
А я все еще рекомендую...
Какие ограничения, вы имеете в виду, если не секрет?
Была старая книга (1-st edition), но потом ведь вышла
On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
Ну, если Вы это найдёте ещё и у Кернигана-Ритчи, то я совсем со стыда
сгорю, ибо в отличие от gnu-c-manual этих ребят я читал от корки до
корки несколько раз. =)
Kernighan Brian W, Ritchie Dennis M. The ANSI C programming language
second edition
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> Кстати, здесь что-то непонятное с
57 matches
Mail list logo