LINUX.ORG.RU

загаловочные файлы


0

0

То ли я дурак, то ли лыжи не едут.

s.h char* buffer;

s.c #include "s.h" int main() { buffer = "text"; }

m.c #include "s.h"

void change() { buffer = "no text"; }

Пишет что multiple definition. А как тогда чтобы переменная была доступна в двух модулях?

anonymous

Сори. Так будет лучше.

s.h
char* buffer;

s.c
#include "s.h"
int main()
{
buffer = "text";
}

m.c
#include "s.h"

void change()
{
buffer = "no text";
}

Пишет что multiple definition.
А как тогда чтобы переменная была доступна в двух модулях?

anonymous
()

s.h
extern char * buffer;

В любом из *.c:
char* buffer;

Murr ★★
()

Можно так:
s.h
#ifndef __s_h
#define __s_h
    char* buffer;
#endif

s.c 
#include "s.h" 
int main() 
{ 
buffer = "text"; 
} 

m.c 
#include "s.h" 

void change() 
{ 
buffer = "no text"; 
}

P.S.: Работать все равно не будет - т.к. кто за тебя будет под буфер
память выделять? Поэтому в заголовочном файле буфер лучше описать 
так: 
 char buffer[100];

PETER ★★
()

2PETER: тебе известно что есть всякие разные сегменты в памяти?

char *buf="test" - нормально, так как строка "test" будет в rodata секции, а buf в data секции и инициализована адресом "test"

man elf

lg ★★
()
Ответ на: комментарий от PETER

PETER (*) (2003-09-08 08:39:08.044752):

Извини, но ты вообще какую-то чушь написал. От твоих #ifndef НИЧЕГО не изменилось, поскольку модули компилятся независимо. А память выделять под буфер в примере нет никакой необходимости. Причем, твой char buffer[100] - вообще нонсенс: указатель же получится константным, его вообще менять нельзя будет!

Еще замечание: не рекомендуется использовать в программе свои символы, начинающиеся с двух подтиров.

Ответ Мурра был совершенно правильным и исчерпывающим.

ЗЫ Большинство линковщиков проглотят исходный пример без ругательств. Ругань начнется при попытке инициализации s.h: char* buffer=NULL;

Die-Hard ★★★★★
()

Ну насчет char buffer[100]( прдеполагал, что чел с буфером работать будет) может я и погорячился, а вот насчет дефайнов все нормально

PETER ★★
()
Ответ на: комментарий от PETER

PETER (*) (2003-09-09 08:46:05.559223):

> насчет дефайнов все нормально

Что нормально? Твои вставки ifndef в том примере ВООБЩЕ НИ НА ЧТО не повлияют. Заголовочный файл включается в каждый модуль ТОЛЬКО ОДИН РАЗ.

Die-Hard ★★★★★
()

2Die-Hard (*) (2003-09-09 14:04:29.320884)

Если человек задает вопросы такого уровня, то про дефайны тоже знать полезно :)

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (2003-09-09 15:32:51.575436):

> Если человек задает вопросы такого уровня, то про дефайны тоже знать полезно :)

Что полезно?

ifndef'ы НЕ решат проблемы, про которую спрашивал автор топика!

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.