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