ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] send pointer on struct to function in C
@ 2005-03-14 14:58 Alexey Morsov
  2005-03-14 16:01 ` Alexandr R. Ogurtzoff
  2005-03-14 16:27 ` Alexey Rusakov
  0 siblings, 2 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-14 14:58 UTC (permalink / raw)
  To: ALT Linux Community

Привет,

Не могу никак понять, как в Си передать в функцию ссылку на массив 
структур ?

Пояснение:
есть структура

typedef struct {
   char *name;
   char *val;
} Options;

далее я ее инициализирую
Options cmd = {
   {"user", "vasya"},
   {"host", "vasya@com.ru")
}

Теперь хочу передать своей функции ссылку на структуру cmd и имя 
параметра "user" а она должна вернуть мне значение этого параметра :)



-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 14:58 [Comm] send pointer on struct to function in C Alexey Morsov
@ 2005-03-14 16:01 ` Alexandr R. Ogurtzoff
  2005-03-14 16:46   ` Alexey Morsov
                     ` (2 more replies)
  2005-03-14 16:27 ` Alexey Rusakov
  1 sibling, 3 replies; 18+ messages in thread
From: Alexandr R. Ogurtzoff @ 2005-03-14 16:01 UTC (permalink / raw)
  To: community


> далее я ее инициализирую
> Options cmd = {
>    {"user", "vasya"},
>    {"host", "vasya@com.ru")
                                                ^^^
>}
А по моему в Си так вы не инициализируете...
cmd - массив структур?

struct Options cmd[]={
    {"user", "vasya"},
    {"host", "vasya@com.ru"}
};
Это как минимум
А вообще то надо бы вам Кернигана с Ричи почитать ;-)
-- 
Best regards
Alexandr R. Ogurtzoff
{
UNIX is user friendly, it's just picky about who its friends are
}


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 14:58 [Comm] send pointer on struct to function in C Alexey Morsov
  2005-03-14 16:01 ` Alexandr R. Ogurtzoff
@ 2005-03-14 16:27 ` Alexey Rusakov
  2005-03-14 16:57   ` Alexey Morsov
  1 sibling, 1 reply; 18+ messages in thread
From: Alexey Rusakov @ 2005-03-14 16:27 UTC (permalink / raw)
  To: community

On 14.03.2005 17:58, Alexey Morsov wrote:
> Привет,
> 
> Не могу никак понять, как в Си передать в функцию ссылку на массив 
> структур ?
> 
> Пояснение:
> есть структура
> 
> typedef struct {
>   char *name;
>   char *val;
> } Options;
> 
> далее я ее инициализирую
> Options cmd = {
Options cmd[] = ... , вы хотели сказать, я думаю.

>   {"user", "vasya"},
>   {"host", "vasya@com.ru")
А здесь не помешало бы либо добавить , { NULL, NULL }, а в функции 
проверять на NULLовость ну например name, либо передавать в функцию 
отдельным параметром размер массива (в примерах этот параметр не использую).

> }
> 
> Теперь хочу передать своей функции ссылку на структуру cmd и имя 
> параметра "user" а она должна вернуть мне значение этого параметра :)
void fn(Options *o, char **user)
{
   /* ... */
   user = (char *)malloc(/* ... */)
   /* ... */
}

/* ... */
{
   char *user;
   fn(cmd, user);
   /* ... */
   free(user); /* например, а вообще как договоритесь */
}

/*** или ***/

char *fn(Options *o)
{
   return /* ... то что нужно */
}

/* ... */
{
   char *user = fn(cmd);
   /* ... */
   /* опять же, как договоритесь */
}

/*** или ***/

void fn(Options *o, char *user, int user_name_len)
{
   strncpy(user, /* ... */, user_name_len);
}

/* ... */
{
   char user[128];
   fn(cmd, user, 128);
   /* ... */
}

-- 
   Alexey "Ktirf" Rusakov


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:01 ` Alexandr R. Ogurtzoff
@ 2005-03-14 16:46   ` Alexey Morsov
  2005-03-14 16:50   ` Alexey Morsov
  2005-03-14 16:51   ` Alexandr R. Ogurtzoff
  2 siblings, 0 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-14 16:46 UTC (permalink / raw)
  To: community


Alexandr R. Ogurtzoff wrote:
>>далее я ее инициализирую
>>Options cmd = {
>>   {"user", "vasya"},
>>   {"host", "vasya@com.ru")
> 
>                                                 ^^^
> 
>>}
> 
> А по моему в Си так вы не инициализируете...
> cmd - массив структур?
> 
> struct Options cmd[]={
>     {"user", "vasya"},
>     {"host", "vasya@com.ru"}
> };
Да очепятался я - конечно там [] стоит :(

> Это как минимум
> А вообще то надо бы вам Кернигана с Ричи почитать ;-)
Читал читал .... давно было правда...

-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:01 ` Alexandr R. Ogurtzoff
  2005-03-14 16:46   ` Alexey Morsov
@ 2005-03-14 16:50   ` Alexey Morsov
  2005-03-14 16:51   ` Alexandr R. Ogurtzoff
  2 siblings, 0 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-14 16:50 UTC (permalink / raw)
  To: community


Alexandr R. Ogurtzoff wrote:
>>далее я ее инициализирую
>>Options cmd = {
>>   {"user", "vasya"},
>>   {"host", "vasya@com.ru")
> 
>                                                 ^^^
> 
>>}
> 
> А по моему в Си так вы не инициализируете...
> cmd - массив структур?
> 
> struct Options cmd[]={
А - и кстати - вот если struct написать - то не компилится :P

-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:01 ` Alexandr R. Ogurtzoff
  2005-03-14 16:46   ` Alexey Morsov
  2005-03-14 16:50   ` Alexey Morsov
@ 2005-03-14 16:51   ` Alexandr R. Ogurtzoff
  2005-03-14 17:00     ` Alexey Morsov
  2 siblings, 1 reply; 18+ messages in thread
From: Alexandr R. Ogurtzoff @ 2005-03-14 16:51 UTC (permalink / raw)
  To: community


> А вообще то надо бы вам Кернигана с Ричи почитать ;-)
Мне тоже :-)

struct Options cmd[]={
     ("user", "vasya"),
     ("host", "vasya@com.ru")
 };

#DEFINE MAX_INDEX = (sizeof(cmd)/sizeof(struct Options));
 Value = get_options("user")->val;

struct Options *get_options(char *)
Ну а внтури функции цикл по  индексу до MAX_INDEX 

-- 
Best regards
Alexandr R. Ogurtzoff
{
UNIX is user friendly, it's just picky about who its friends are
}


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:27 ` Alexey Rusakov
@ 2005-03-14 16:57   ` Alexey Morsov
  2005-03-14 21:00     ` Alexandr R. Ogurtzoff
                       ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-14 16:57 UTC (permalink / raw)
  To: community


Alexey Rusakov wrote:
> On 14.03.2005 17:58, Alexey Morsov wrote:
> 
>>Привет,
>>
>>Не могу никак понять, как в Си передать в функцию ссылку на массив 
>>структур ?
>>
>>Пояснение:
>>есть структура
>>
>>typedef struct {
>>  char *name;
>>  char *val;
>>} Options;
>>
>>далее я ее инициализирую
>>Options cmd = {
> 
> Options cmd[] = ... , вы хотели сказать, я думаю.
Точно точно - описался - в коде то нормально написано

> 
> 
>>  {"user", "vasya"},
>>  {"host", "vasya@com.ru")
> 
> А здесь не помешало бы либо добавить , { NULL, NULL }, а в функции 
> проверять на NULLовость ну например name, либо передавать в функцию 
> отдельным параметром размер массива (в примерах этот параметр не использую).
Хм.... ну если вы имеет ввиду типа для определения конца массива при его 
переборе.... так оно вроде и работает как есть
Т.е. для текущей структуры конструкция вида

while (cmd[i].user != NULL )
   printf("%s\n", cmd[i++].host);

вполне себе работает  :)

>>Теперь хочу передать своей функции ссылку на структуру cmd и имя 
>>параметра "user" а она должна вернуть мне значение этого параметра :)
> 
> void fn(Options *o, char **user)
Тут наверное лучше пояснить на живом примере так сказать.
Структура
typedef struct {
    const char *name;
    char *val;
} Options;

инициализация
Options cmd[] = {
    {"squidlog", "access.log"},      // path to squid access.log file
    {"config", "trafficd.conf"}   // path to trafficd conf file
};


функция

char *OptionGetVal(Options *opt, char *name) {
    int i=0;
    while (opt[i].name != NULL ) {
       if (!strcmp(name,opt[i].name))
          return(opt[i].val);
       i++;
    }
    return NULL;
}

вызов ее такой

printf("squidlog=%s\n", OptionGetVal(cmd,"squidlog"));

при компиляции имею:

In file included from common.c:1,
                  from main.c:2:
trafficd.h:23: error: conflicting types for `Options'
trafficd.h:23: error: previous declaration of `Options'
trafficd.h:32: error: conflicting types for `OptionsGetVal'
trafficd.h:32: error: previous declaration of `OptionsGetVal'

 >_< Вот я понимаю что я тут как-то не прав? Но где именно я не прав?

-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:51   ` Alexandr R. Ogurtzoff
@ 2005-03-14 17:00     ` Alexey Morsov
  0 siblings, 0 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-14 17:00 UTC (permalink / raw)
  To: community


Alexandr R. Ogurtzoff wrote:

> #DEFINE MAX_INDEX = (sizeof(cmd)/sizeof(struct Options));
>  Value = get_options("user")->val;
> 
> struct Options *get_options(char *)

> Ну а внтури функции цикл по  индексу до MAX_INDEX 
> 
Дык я и не могу описать использование Options внутри функции... ругается 
компилятор бредово
Я  в треде привел точный лист как я чего использую... и что оно ругает
Посмотрите пожалуйста...


-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:57   ` Alexey Morsov
@ 2005-03-14 21:00     ` Alexandr R. Ogurtzoff
  2005-03-14 21:11     ` Alexey Rusakov
  2005-03-14 21:23     ` Alexandr R. Ogurtzoff
  2 siblings, 0 replies; 18+ messages in thread
From: Alexandr R. Ogurtzoff @ 2005-03-14 21:00 UTC (permalink / raw)
  To: community


> инициализация
> Options cmd[] = {
>     {"squidlog", "access.log"},      // path to squid access.log file
>     {"config", "trafficd.conf"} ,  // path to trafficd conf file
       {NULL,NULL}  //Раз уж в коде проверяете
> };
>
>
> функция
>
> char *OptionGetVal(Options *opt, char *name) {
>     int i=0;
>     while (opt[i].name != NULL ) {
>        if (!strcmp(name,opt[i].name))
           return(char *)(opt[i].val);
Тип бы надо всё таки привести раз функция так описана
>        i++;
>     }
>     return NULL;
> }
>
> вызов ее такой
>
> printf("squidlog=%s\n", OptionGetVal(cmd,"squidlog"));
>
 Ну а вообще на мой взгляд было бы кошернее
static Options cmd[] = {
     {"squidlog", "access.log"},      // path to squid access.log file
     {"config", "trafficd.conf"} ,  // path to trafficd conf file
 };

// на момент компиляции размер масива cmd уже известен
// Посчитаем число элементов
#define MAX_INDEX = (sizeof(cmd)/sizeof(struct Options));

struct  Options *OptionGetVal(Options *opt, char *name) {
    int i=0;
    while ( i < MAX_INDEX  ){
       if (!strcmp(name,opt[i].name))
          return(opt[i]);
       i++;
    }
    return NULL;
}
И соответвено:
 printf("squidlog=%s\n", (char *)OptionGetVal(cmd,"squidlog")->val);
-- 
Best regards
Alexandr R. Ogurtzoff
{
UNIX is user friendly, it's just picky about who its friends are
}


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:57   ` Alexey Morsov
  2005-03-14 21:00     ` Alexandr R. Ogurtzoff
@ 2005-03-14 21:11     ` Alexey Rusakov
  2005-03-15  8:01       ` Alexey Morsov
  2005-03-14 21:23     ` Alexandr R. Ogurtzoff
  2 siblings, 1 reply; 18+ messages in thread
From: Alexey Rusakov @ 2005-03-14 21:11 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 2423 bytes --]

Alexey Morsov wrote:

>>> {"user", "vasya"},
>>> {"host", "vasya@com.ru")
>>>      
>>>
>>А здесь не помешало бы либо добавить , { NULL, NULL }, а в функции 
>>проверять на NULLовость ну например name, либо передавать в функцию 
>>отдельным параметром размер массива (в примерах этот параметр не использую).
>>    
>>
>Хм.... ну если вы имеет ввиду типа для определения конца массива при его 
>переборе.... так оно вроде и работает как есть
>Т.е. для текущей структуры конструкция вида
>
>while (cmd[i].user != NULL )
>   printf("%s\n", cmd[i++].host);
>
>вполне себе работает  :)
>  
>
Кхм. Вам крупно повезло.

>Тут наверное лучше пояснить на живом примере так сказать.
>Структура
>typedef struct {
>    const char *name;
>    char *val;
>} Options;
>
>инициализация
>Options cmd[] = {
>    {"squidlog", "access.log"},      // path to squid access.log file
>    {"config", "trafficd.conf"}   // path to trafficd conf file
>};
>
>
>функция
>
>char *OptionGetVal(Options *opt, char *name) {
>  
>
Здесь лучше const char *name. Просто для порядка.

>    int i=0;
>    while (opt[i].name != NULL ) {
>       if (!strcmp(name,opt[i].name))
>          return(opt[i].val);
>       i++;
>    }
>    return NULL;
>}
>
>вызов ее такой
>
>printf("squidlog=%s\n", OptionGetVal(cmd,"squidlog"));
>
>при компиляции имею:
>
>In file included from common.c:1,
>                  from main.c:2:
>trafficd.h:23: error: conflicting types for `Options'
>trafficd.h:23: error: previous declaration of `Options'
>trafficd.h:32: error: conflicting types for `OptionsGetVal'
>trafficd.h:32: error: previous declaration of `OptionsGetVal'
>
> >_< Вот я понимаю что я тут как-то не прав? Но где именно я не прав?
>  
>
Что-то вы не договариваете. Я пришпилил к этому письму файлик - он 
прекрасно компилируется через 'gcc-3.4 -o test test.c'.

-- 
  Alexey "Ktirf" Rusakov

[-- Attachment #2: test.c --]
[-- Type: text/plain, Size: 477 bytes --]

#include <stdio.h>

typedef struct {
    const char *name;
    char *val;
} Options;

Options cmd[] = {
    {"squidlog", "access.log"},
    {"config", "trafficd.conf"},
    {NULL, NULL}
};

char *OptionGetVal(Options *opt, const char *name) {
    int i=0;
    while (opt[i].name) {
       if (!strcmp(name,opt[i].name))
          return(opt[i].val);
       i++;
    }
    return NULL;
}

int main() {
    printf("squidlog=%s\n", OptionGetVal(cmd, "squidlog"));
    return 0;
}

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 16:57   ` Alexey Morsov
  2005-03-14 21:00     ` Alexandr R. Ogurtzoff
  2005-03-14 21:11     ` Alexey Rusakov
@ 2005-03-14 21:23     ` Alexandr R. Ogurtzoff
  2 siblings, 0 replies; 18+ messages in thread
From: Alexandr R. Ogurtzoff @ 2005-03-14 21:23 UTC (permalink / raw)
  To: community

         return(opt[i]->val);
                   ^^^^^^^^^^^^^
ой! Что я увидел, передавали как ссылку, а вернуть значение структуры 
хотите  ;-)
-- 
Best regards
Alexandr R. Ogurtzoff
{
UNIX is user friendly, it's just picky about who its friends are
}


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-14 21:11     ` Alexey Rusakov
@ 2005-03-15  8:01       ` Alexey Morsov
  2005-03-15  8:20         ` Denis S. Filimonov
  2005-03-15  8:20         ` Michael Holzman
  0 siblings, 2 replies; 18+ messages in thread
From: Alexey Morsov @ 2005-03-15  8:01 UTC (permalink / raw)
  To: community


Alexey Rusakov wrote:
> Что-то вы не договариваете. Я пришпилил к этому письму файлик - он 
> прекрасно компилируется через 'gcc-3.4 -o test test.c'.

Действительно. Ваш файлик компилируется. А моя сволочь продолжает 
ругаться на конфликт

trafficd.h:23: error: conflicting types for `Options'
trafficd.h:23: error: previous declaration of `Options'

// Structure for cmd-line options
typedef struct {
         const char *name;
         char *val;
} Options;


Эта структура больше нигде не объявлена. Только используется... Чего он 
к хёдеры привязался я не пойму :(

Если я этот typedef переношу в .c - то все компилится :) Почему нельзя 
дать объявление структуры (т.е. шаблон) в .h ?

-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15  8:01       ` Alexey Morsov
@ 2005-03-15  8:20         ` Denis S. Filimonov
  2005-03-15  8:38           ` Alexey Morsov
  2005-03-15  8:20         ` Michael Holzman
  1 sibling, 1 reply; 18+ messages in thread
From: Denis S. Filimonov @ 2005-03-15  8:20 UTC (permalink / raw)
  To: community

On Tuesday 15 March 2005 03:01, Alexey Morsov wrote:
> Alexey Rusakov wrote:
> > Что-то вы не договариваете. Я пришпилил к этому письму файлик - он
> > прекрасно компилируется через 'gcc-3.4 -o test test.c'.
>
> Действительно. Ваш файлик компилируется. А моя сволочь продолжает
> ругаться на конфликт
>
> trafficd.h:23: error: conflicting types for `Options'
> trafficd.h:23: error: previous declaration of `Options'
>
> // Structure for cmd-line options
> typedef struct {
>          const char *name;
>          char *val;
> } Options;
>
>
> Эта структура больше нигде не объявлена. Только используется... Чего он
> к хёдеры привязался я не пойму :(
>
> Если я этот typedef переношу в .c - то все компилится :) Почему нельзя
> дать объявление структуры (т.е. шаблон) в .h ?
а он (хедер) у вас, часом, не включается дважды?

-- 
WBR,
Denis.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15  8:01       ` Alexey Morsov
  2005-03-15  8:20         ` Denis S. Filimonov
@ 2005-03-15  8:20         ` Michael Holzman
  1 sibling, 0 replies; 18+ messages in thread
From: Michael Holzman @ 2005-03-15  8:20 UTC (permalink / raw)
  To: community

On Tue, 15 Mar 2005 11:01:53 +0300, Alexey Morsov <samurai@ricom.ru> wrote:

> Если я этот typedef переношу в .c - то все компилится :) Почему нельзя
> дать объявление структуры (т.е. шаблон) в .h ?
> 

Можно. Только хорошо бы увидеть полный текст (и .h и .c/.cpp ) для
того чтобы понять где собака порылась. Можно в личку.

-- 
Regards,
    Michael Holzman

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15  8:20         ` Denis S. Filimonov
@ 2005-03-15  8:38           ` Alexey Morsov
  2005-03-15 11:01             ` Alexey Rusakov
  0 siblings, 1 reply; 18+ messages in thread
From: Alexey Morsov @ 2005-03-15  8:38 UTC (permalink / raw)
  To: community


Denis S. Filimonov wrote:
> On Tuesday 15 March 2005 03:01, Alexey Morsov wrote:
> 
>>Alexey Rusakov wrote:
>>
>>>Что-то вы не договариваете. Я пришпилил к этому письму файлик - он
>>>прекрасно компилируется через 'gcc-3.4 -o test test.c'.
>>
>>Действительно. Ваш файлик компилируется. А моя сволочь продолжает
>>ругаться на конфликт
>>
>>trafficd.h:23: error: conflicting types for `Options'
>>trafficd.h:23: error: previous declaration of `Options'
>>
>>// Structure for cmd-line options
>>typedef struct {
>>         const char *name;
>>         char *val;
>>} Options;
>>
>>
>>Эта структура больше нигде не объявлена. Только используется... Чего он
>>к хёдеры привязался я не пойму :(
>>
>>Если я этот typedef переношу в .c - то все компилится :) Почему нельзя
>>дать объявление структуры (т.е. шаблон) в .h ?
> 
> а он (хедер) у вас, часом, не включается дважды?
ТОЧНО! МЛЯ! ^_^ :) Подключался хедер с объявой дваджы... бррр....
Ну и заодно я немного по другому сделал (подсмотрел в getopt.h) - в хедере
struct Options {
...
}
а в сишниках struct Options cmd[]= {
...
}
Все работает :) Спасибо всем :)


-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15  8:38           ` Alexey Morsov
@ 2005-03-15 11:01             ` Alexey Rusakov
  2005-03-15 11:34               ` Alexey Morsov
  0 siblings, 1 reply; 18+ messages in thread
From: Alexey Rusakov @ 2005-03-15 11:01 UTC (permalink / raw)
  To: community

Alexey Morsov wrote:

>ТОЧНО! МЛЯ! ^_^ :) Подключался хедер с объявой дваджы... бррр....
>  
>
Настоятельно рекомендую для таких случаев в .h-файлах ставить охранников 
в виде
#ifndef *filename*_INCLUDED
#define *filename*_INCLUDED
/* все объявления */
#endif

Вместо *filename*_INCLUDED можно ставить что угодно, уникальное в рамках 
проекта и всех зависящих от него :)

-- 
  Alexey "Ktirf" Rusakov


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15 11:01             ` Alexey Rusakov
@ 2005-03-15 11:34               ` Alexey Morsov
  2005-03-15 11:50                 ` Alexey Rusakov
  0 siblings, 1 reply; 18+ messages in thread
From: Alexey Morsov @ 2005-03-15 11:34 UTC (permalink / raw)
  To: community


Alexey Rusakov wrote:

> 
> Настоятельно рекомендую для таких случаев в .h-файлах ставить охранников 
> в виде
> #ifndef *filename*_INCLUDED
> #define *filename*_INCLUDED
> /* все объявления */
> #endif
> 
Немного не понял. У меня сейчас include вообще только в main.c :(
Если я его в другой сишник вставлю - все опять переопределится .

-- 
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai@jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] send pointer on struct to function in C
  2005-03-15 11:34               ` Alexey Morsov
@ 2005-03-15 11:50                 ` Alexey Rusakov
  0 siblings, 0 replies; 18+ messages in thread
From: Alexey Rusakov @ 2005-03-15 11:50 UTC (permalink / raw)
  To: community

Alexey Morsov wrote:

>Alexey Rusakov wrote:
>
>  
>
>>Настоятельно рекомендую для таких случаев в .h-файлах ставить охранников 
>>в виде
>>#ifndef *filename*_INCLUDED
>>#define *filename*_INCLUDED
>>/* все объявления */
>>#endif
>>    
>>
>Немного не понял. У меня сейчас include вообще только в main.c :(
>Если я его в другой сишник вставлю - все опять переопределится .
>  
>
Охранник предохраняет от повторного включения h-файла. То есть если оно 
обнаруживается, второй раз файл просто не включается. Если какие-то 
файлы включаются через другие файлы, легко прийти к тому, что один файл 
будет дважды включаться. Надежное и универсальное решение этой проблемы 
на сегодня известно ровно одно. В целом это хороший тон - ставить 
охранников в h-файлах.

-- 
 Alexey "Ktirf" Rusakov


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2005-03-15 11:50 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-14 14:58 [Comm] send pointer on struct to function in C Alexey Morsov
2005-03-14 16:01 ` Alexandr R. Ogurtzoff
2005-03-14 16:46   ` Alexey Morsov
2005-03-14 16:50   ` Alexey Morsov
2005-03-14 16:51   ` Alexandr R. Ogurtzoff
2005-03-14 17:00     ` Alexey Morsov
2005-03-14 16:27 ` Alexey Rusakov
2005-03-14 16:57   ` Alexey Morsov
2005-03-14 21:00     ` Alexandr R. Ogurtzoff
2005-03-14 21:11     ` Alexey Rusakov
2005-03-15  8:01       ` Alexey Morsov
2005-03-15  8:20         ` Denis S. Filimonov
2005-03-15  8:38           ` Alexey Morsov
2005-03-15 11:01             ` Alexey Rusakov
2005-03-15 11:34               ` Alexey Morsov
2005-03-15 11:50                 ` Alexey Rusakov
2005-03-15  8:20         ` Michael Holzman
2005-03-14 21:23     ` Alexandr R. Ogurtzoff

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git