* [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