/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
variable
Fra : Søren Jensen


Dato : 19-01-05 14:27

hej

Et lille spørgsmål.

Jeg er ved at lave et program til en mikroprocessor, programmet er bygget på
af en masse funktioner med en masse variabler.
De fleste af variablene, skal bruges af funktioner der ikke er placeret i de
samme c filer.

Også er mit spørgsmål? hvordan tilgår man smartes de forskellige variable,
når man nu ikke bruger globale variable..

Man kan jo lave en funktion, til at overføre en variable eller en pointer
til en variable.

På forhånd tak...






 
 
Brian Axelgaard (19-01-2005)
Kommentar
Fra : Brian Axelgaard


Dato : 19-01-05 14:54

"Søren Jensen" <x@x.xxx> skrev i en meddelelse
news:41ee6077$0$33702$edfadb0f@dread16.news.tele.dk...
> De fleste af variablene, skal bruges af funktioner der ikke er placeret i
de
> samme c filer.
> Også er mit spørgsmål? hvordan tilgår man smartes de forskellige variable,
> når man nu ikke bruger globale variable..

På en PIC16 mener jeg at man skal erklære variablen i både "main" c-filen og
hvor den bruges. Den skal dog ikke erklæres med samme datatype, men med
extern.
Det er i hvert fald som jeg husker det lige nu :)



Søren Jensen (19-01-2005)
Kommentar
Fra : Søren Jensen


Dato : 19-01-05 15:49

>> De fleste af variablene, skal bruges af funktioner der ikke er placeret i
> de
>> samme c filer.
>> Også er mit spørgsmål? hvordan tilgår man smartes de forskellige
>> variable,
>> når man nu ikke bruger globale variable..
>
> På en PIC16 mener jeg at man skal erklære variablen i både "main" c-filen
> og
> hvor den bruges. Den skal dog ikke erklæres med samme datatype, men med
> extern.
> Det er i hvert fald som jeg husker det lige nu :)

Det var også for at undgå at skulle erklære variablen mere end en gang.



Søren Jensen (19-01-2005)
Kommentar
Fra : Søren Jensen


Dato : 19-01-05 15:59


"Søren Jensen" <x@x.xxx> skrev i en meddelelse
news:41ee73a5$0$33631$edfadb0f@dread16.news.tele.dk...
>>> De fleste af variablene, skal bruges af funktioner der ikke er placeret
>>> i
>> de
>>> samme c filer.
>>> Også er mit spørgsmål? hvordan tilgår man smartes de forskellige
>>> variable,
>>> når man nu ikke bruger globale variable..
>>
>> På en PIC16 mener jeg at man skal erklære variablen i både "main" c-filen
>> og
>> hvor den bruges. Den skal dog ikke erklæres med samme datatype, men med
>> extern.
>> Det er i hvert fald som jeg husker det lige nu :)
>
> Det var også for at undgå at skulle erklære variablen mere end en gang.
>
>

jeg har overvejet om det er ok at erklærer variablen i h filen (på en måde),
således af den er tilgængelig for de filer der inkluder h filen hvori
variablen er erklæret.



Thorsten Ottosen (19-01-2005)
Kommentar
Fra : Thorsten Ottosen


Dato : 19-01-05 19:12

| >> På en PIC16 mener jeg at man skal erklære variablen i både "main" c-filen
| >> og
| >> hvor den bruges. Den skal dog ikke erklæres med samme datatype, men med
| >> extern.
| >> Det er i hvert fald som jeg husker det lige nu :)
| >
| > Det var også for at undgå at skulle erklære variablen mere end en gang.
| >
| >
|
| jeg har overvejet om det er ok at erklærer variablen i h filen (på en måde),
| således af den er tilgængelig for de filer der inkluder h filen hvori
| variablen er erklæret.

du laver en global variable med

extern int foo;

i .h filen. Så definerer du den i en .c/.cpp fil.

Jeg vil foreslå at du ikke tilgår den som global, men bruger den
som parameter til det functioner, der skal bruge den.

-Thorsten



Søren Jensen (20-01-2005)
Kommentar
Fra : Søren Jensen


Dato : 20-01-05 08:03


"Thorsten Ottosen" <nesotto@cs.auc.dk> skrev i en meddelelse
news:41eea2e1$0$48322$14726298@news.sunsite.dk...
>| >> På en PIC16 mener jeg at man skal erklære variablen i både "main"
>c-filen
> | >> og
> | >> hvor den bruges. Den skal dog ikke erklæres med samme datatype, men
> med
> | >> extern.
> | >> Det er i hvert fald som jeg husker det lige nu :)
> | >
> | > Det var også for at undgå at skulle erklære variablen mere end en
> gang.
> | >
> | >
> |
> | jeg har overvejet om det er ok at erklærer variablen i h filen (på en
> måde),
> | således af den er tilgængelig for de filer der inkluder h filen hvori
> | variablen er erklæret.
>
> du laver en global variable med
>
> extern int foo;
>
> i .h filen. Så definerer du den i en .c/.cpp fil.

Her skal man også erklære/definer variablen 2 gange, findes der ikke en måde
hvor man kun skal gøre det en gang.





Brian Schelde (20-01-2005)
Kommentar
Fra : Brian Schelde


Dato : 20-01-05 08:49

"Søren Jensen" <x@x.xxx> wrote in message
news:41ef57e7$0$33704$edfadb0f@dread16.news.tele.dk...
> Her skal man også erklære/definer variablen 2 gange, findes der ikke en
måde
> hvor man kun skal gøre det en gang.
Jo, men så skal du tilgå den via en funktion hvor du enten returnerer
værdien af den eller en pointer til den. Jeg tror ikke der er andre
muligheder.



Søren Jensen (20-01-2005)
Kommentar
Fra : Søren Jensen


Dato : 20-01-05 09:47


"Brian Schelde" <br_sc@hotmail.com> skrev i en meddelelse
news:41ef624a$0$48648$edfadb0f@dread15.news.tele.dk...
> "Søren Jensen" <x@x.xxx> wrote in message
> news:41ef57e7$0$33704$edfadb0f@dread16.news.tele.dk...
>> Her skal man også erklære/definer variablen 2 gange, findes der ikke en
> måde
>> hvor man kun skal gøre det en gang.
> Jo, men så skal du tilgå den via en funktion hvor du enten returnerer
> værdien af den eller en pointer til den. Jeg tror ikke der er andre
> muligheder.


ok nu har jeg accepteret at jeg skal erklærer/definerer variablen 2 gange,
men min kompiler kommer ikke med en fejl hvis variablen er af to forskellige
typer f.eks

void main (void)
{
unsigned long VarData = 100;

}

void funktion (void)
{
extern unsigned int VarData;

}
Findes der en mulighed hvorved man kan få kompileren til at "opdage" denne
fejl.



Niels Dybdahl (20-01-2005)
Kommentar
Fra : Niels Dybdahl


Dato : 20-01-05 10:00

> ok nu har jeg accepteret at jeg skal erklærer/definerer variablen 2 gange,
> men min kompiler kommer ikke med en fejl hvis variablen er af to
forskellige
> typer f.eks
>
> void main (void)
> {
> unsigned long VarData = 100;
>
> }
>
> void funktion (void)
> {
> extern unsigned int VarData;
>
> }
> Findes der en mulighed hvorved man kan få kompileren til at "opdage" denne
> fejl.

Du skal erklære og definere variablen uden for funktionerne:

unsigned long VarData = 100;
void main (void)
{ }

extern unsigned int VarData;
void funktion (void)
{}

linien med extern opretter ikke en variabel. Den fortæller bare compileren
at der et andet sted i programmet findes en variabel med det navn.

Niels Dybdahl



Thorsten Ottosen (20-01-2005)
Kommentar
Fra : Thorsten Ottosen


Dato : 20-01-05 23:06

"Niels Dybdahl" <ndy@fjern.detteesko-graphics.com> wrote in message
news:41ef7322$0$17406$4d4eb98e@news.dk.uu.net...
|> ok nu har jeg accepteret at jeg skal erklærer/definerer variablen 2 gange,
| > men min kompiler kommer ikke med en fejl hvis variablen er af to
| forskellige
| > typer f.eks
| >
| > void main (void)
| > {
| > unsigned long VarData = 100;
| >
| > }
| >
| > void funktion (void)
| > {
| > extern unsigned int VarData;
| >
| > }
| > Findes der en mulighed hvorved man kan få kompileren til at "opdage" denne
| > fejl.

det er en one-definition violation du har der...udefineret opførsel følger.

Anyway, du skal declarare variablen i .h filen og includere denne fil hvor
variablen måtte bruges---specielt også der hvor du definere vaiablen.

På mine kompilere få jeg disse meddelelser:

Comeau C/C++ 4.3.3 (Oct 25 2003 12:02:26) for MS_WINDOWS_x86
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:non-strict warnings C++

"var.cpp", line 3: error #147: declaration is incompatible with "int foo"
(declared at line 1 of "var.hpp")
unsigned int foo = 2;
^
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

var.cpp
var.cpp(3) : error C2371: 'foo' : redefinition; different basic types
e:\C++\libraries\test\var.hpp(1) : see declaration of 'foo'

$ g++ var.cpp
var.cpp:3: error: conflicting types for `unsigned int foo'
var.hpp:1: error: previous declaration as `int foo'
# cc1plus 0.09 0.06

mvh

Thorsten




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste