/ 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
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
oversættelse af "string literal" ti
Fra : Martin Jørgensen


Dato : 18-05-06 13:40

Hej,

I C-standarden og adskillige gange i comp.lang.c og lignende steder har
jeg flere gange set udtrykket: "string literal"...

F.eks. står der i vistnok i C-standarden afsnit "6.4.9 Comments" at:

"a//b" // four-character string literal

Hvad hedder det (literal) på dansk?


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

 
 
Michael Zedeler (18-05-2006)
Kommentar
Fra : Michael Zedeler


Dato : 18-05-06 14:17

Martin Jørgensen wrote:
> Hvad hedder det (literal) på dansk?

Jeg ville oversætte det til strengkonstant.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Martin Jørgensen (18-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 18-05-06 15:41

Michael Zedeler wrote:
> Martin Jørgensen wrote:
>
>> Hvad hedder det (literal) på dansk?
>
>
> Jeg ville oversætte det til strengkonstant.

Du mener at det her:

const char bla1[] = "blabla";

Er en string literal = streng konstant? Hvad med det her:

char bla2[] = "blablabla";

Er det en string literal/streng-konstant?


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Michael Zedeler (19-05-2006)
Kommentar
Fra : Michael Zedeler


Dato : 19-05-06 00:49

Martin Jørgensen wrote:
> Michael Zedeler wrote:
>
>> Martin Jørgensen wrote:
>>
>>> Hvad hedder det (literal) på dansk?
>>
>> Jeg ville oversætte det til strengkonstant.
>
> Du mener at det her:
>
> const char bla1[] = "blabla";
>
> Er en string literal = streng konstant?

De to sider er to forskellige ting, men ellers ville jeg kalde begge
dele for strengkonstanter. Som du kan se andetsteds i tråden, er der
ikke rigtig nogen god oversættelse. At kalde det en strengkonstant er
upræcist, men svjv det tætteste man kan komme på noget dansk, der ikke
lyder som volapyk (måske lige på nær "strengliteral"?).

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Bertel Brander (18-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 18-05-06 18:22

Martin Jørgensen wrote:
> Hej,
>
> I C-standarden og adskillige gange i comp.lang.c og lignende steder har
> jeg flere gange set udtrykket: "string literal"...
>
> F.eks. står der i vistnok i C-standarden afsnit "6.4.9 Comments" at:
>
> "a//b" // four-character string literal
>
> Hvad hedder det (literal) på dansk?

Det hedder en string literal på dansk.

Jeg har aldrig hørt nogen meningsfuld oversættelse.

At kalde det en streng konstant er misvisende.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Eric Jensen (18-05-2006)
Kommentar
Fra : Eric Jensen


Dato : 18-05-06 18:40


"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:446cad1c$0$102$edfadb0f@dread16.news.tele.dk...

> Jeg har aldrig hørt nogen meningsfuld oversættelse.

Jeg håber den jeg lige har smidt, for 2 minutter siden var meningsfuld :)

> At kalde det en streng konstant er misvisende.

Enig, men en string literal vil dog altid være konstant i en computer
program ;)

//eric



Bertel Brander (18-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 18-05-06 18:56

Eric Jensen wrote:
> "Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
> news:446cad1c$0$102$edfadb0f@dread16.news.tele.dk...
>
>> Jeg har aldrig hørt nogen meningsfuld oversættelse.
>
> Jeg håber den jeg lige har smidt, for 2 minutter siden var meningsfuld :)

Jeg så ikke nogen oversættelse, blot en forklaring af hvad det var.

>> At kalde det en streng konstant er misvisende.
>
> Enig, men en string literal vil dog altid være konstant i en computer
> program ;)

Ja og nej. I C++ er typen på en string literal const char*, i C er det
char *. Men man må ikke ændre på indholdet i nogen af dem.

Nogle compilere kan overtales til at lave string literals modificerbare.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Martin Jørgensen (18-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 18-05-06 23:26

Bertel Brander wrote:
> Eric Jensen wrote:
-snip-

>>> At kalde det en streng konstant er misvisende.
>>
>>
>> Enig, men en string literal vil dog altid være konstant i en computer
>> program ;)
>
>
> Ja og nej. I C++ er typen på en string literal const char*, i C er det
> char *. Men man må ikke ændre på indholdet i nogen af dem.

Såvidt jeg husker:

char *streng = "Strenge-streng";
.. . .

int main(void)
{
streng[4] = 'a';
return 0;
}

Er da vistnok gyldigt, er det ikke? (har ikke afprøvet)

> Nogle compilere kan overtales til at lave string literals modificerbare.

Altså jeg kan ikke rigtigt se formålet med at kalde en "string" for en
"string literal"... Ordet "literal" er overflødigt...


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Bertel Brander (19-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 19-05-06 00:04

Martin Jørgensen wrote:
> Såvidt jeg husker:
>
> char *streng = "Strenge-streng";
> . . .
>
> int main(void)
> {
> streng[4] = 'a';
> return 0;
> }
>
> Er da vistnok gyldigt, er det ikke? (har ikke afprøvet)

Nej, det er ikke gyldigt, man må ikke modificere en string literal.

>
> Altså jeg kan ikke rigtigt se formålet med at kalde en "string" for en
> "string literal"... Ordet "literal" er overflødigt...

Som jeg skrev:

"Jeg vælger at kalde det en streng literal, for at skelne den fra:
const char* p1 = ...
const char p2[] = ...
const std::string p3 = ...
osv. "

p1, p2, p3 er (/kan være) strenge, i en eller anden form.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Martin Jørgensen (19-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 19-05-06 23:25

Bertel Brander wrote:
> Martin Jørgensen wrote:
>
>> Såvidt jeg husker:
>>
>> char *streng = "Strenge-streng";
>> . . .
>>
>> int main(void)
>> {
>> streng[4] = 'a';
>> return 0;
>> }
>>
>> Er da vistnok gyldigt, er det ikke? (har ikke afprøvet)
>
>
> Nej, det er ikke gyldigt, man må ikke modificere en string literal.

Så det her er ikke en string literal?

#include <stdio.h>

char streng[] = "Strenge-streng";


int main(void)
{
printf("%s\n", streng);
streng[5] = 'n';
printf("%s\n", streng);
return 0;
}


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Bertel Brander (20-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 20-05-06 01:31

Martin Jørgensen wrote:
> Så det her er ikke en string literal?
>
> #include <stdio.h>
>
> char streng[] = "Strenge-streng";

"Strenge-streng" er en string literal, den bliver *kopieret*
over i streng under program opstart, streng er et *array*
af char's der derved kommer til at indeholde en streng.

>
> int main(void)
> {
> printf("%s\n", streng);

"%s\n" er en string literal

> streng[5] = 'n';
Her modificerer du *kopien* af string literal'en,
Det er fuldt lovligt.

Havde du derimod lavet:
char* streng = "Strenge-streng";

Ville streng være en pointer til char, som peger på
en string literal, hvis du derpå forsøger at ændre denne
(streng[5] = 'n') ville du forsøge at ændre indholdet i
din string literal, og det må man ikke.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Arne Vajhøj (20-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 20-05-06 01:53

Bertel Brander wrote:
>> char streng[] = "Strenge-streng";
>
> "Strenge-streng" er en string literal, den bliver *kopieret*
> over i streng under program opstart, streng er et *array*
> af char's der derved kommer til at indeholde en streng.

Nu skal man måske nok skelne lidt mellem semantik
og kode generering.

Men jeg kan ikke lide udtrykket kopierer i
denne sammehæng - det er lidt for meget runtimsk
og lidt for lidt compilersk i mine ører.

Compileren initialiserer en streng variabel
med en string literal. Måske.

Arne

Mads Bahrt (20-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 20-05-06 02:33

Bertel Brander skrev:
> Martin Jørgensen wrote:
>> Så det her er ikke en string literal?
>>
>> #include <stdio.h>
>>
>> char streng[] = "Strenge-streng";
>
> "Strenge-streng" er en string literal, den bliver *kopieret*
> over i streng under program opstart, streng er et *array*
> af char's der derved kommer til at indeholde en streng.
Du kan ikke kopiere en streng med "=" - du kopierer kun pointeren til
første tegn.

Når du skriver:
> char* streng = "Strenge-streng";
Er det fuldkommen ækvivalent - det er blot to notationer for det samme.
Der er ingen forskel på char * og char[] - begge er pointere.

Men det vigtige er ikke diskusionen af om man kan ændre literals - i
mine øjne giver det slet ikke mening at tale om at ændre eller ikke
ændre dem under kørslen af programmet.
Literal er blot udtrykket for det, at der på udviklingstidspunktet står
en konkret værdi i koden.

MVH

Mads

Arne Vajhøj (20-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 20-05-06 03:17

Mads Bahrt wrote:
> Bertel Brander skrev:
>> Martin Jørgensen wrote:
>>> char streng[] = "Strenge-streng";
>>
>> "Strenge-streng" er en string literal, den bliver *kopieret*
>> over i streng under program opstart, streng er et *array*
>> af char's der derved kommer til at indeholde en streng.

> Du kan ikke kopiere en streng med "=" - du kopierer kun pointeren til
> første tegn.

Man kopierer hverken streng eller pointer.

> Når du skriver:
>> char* streng = "Strenge-streng";
> Er det fuldkommen ækvivalent - det er blot to notationer for det samme.
> Der er ingen forskel på char * og char[] - begge er pointere.

Nej - det er ikke ækvivalent.

Det første giver sizeof(streng) bytes i en RW memory sektion.

Det andet giver sizeof(streng) bytes i en RO memory sektion
og sizeof(char*) bytes i en RW memory sektion.

I nogle tilfælde betyder forskellen ikke noget.

Men i andre tilfælde kan det betyde noget.

Bertel har allerede givet et eksempel på at det betyder
noget, nemlig hvis man vil ændre i strengen.

Arne

Mads Bahrt (20-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 20-05-06 10:18

Arne Vajhøj skrev:
> Mads Bahrt wrote:
>> Bertel Brander skrev:
>>> Martin Jørgensen wrote:
>>>> char streng[] = "Strenge-streng";
>>>
>>> "Strenge-streng" er en string literal, den bliver *kopieret*
>>> over i streng under program opstart, streng er et *array*
>>> af char's der derved kommer til at indeholde en streng.
>
>> Du kan ikke kopiere en streng med "=" - du kopierer kun pointeren til
>> første tegn.
>
> Man kopierer hverken streng eller pointer.

Som jeg læser koden laver du på højressiden af lighedstegnet et array af
størrelsesordnen sizeof(streng). På venstresiden laver du en charpointer
og lighedstegnet kopierer en pointer til første adresse i arrayet.

>> Når du skriver:
>>> char* streng = "Strenge-streng";
>> Er det fuldkommen ækvivalent - det er blot to notationer for det
>> samme. Der er ingen forskel på char * og char[] - begge er pointere.
>
> Nej - det er ikke ækvivalent.
>
> Det første giver sizeof(streng) bytes i en RW memory sektion.
>
> Det andet giver sizeof(streng) bytes i en RO memory sektion
> og sizeof(char*) bytes i en RW memory sektion.

Var det lidt hurtigt skrevet, eller er vi uenige i at der i begge
tilfælde skabes en char * som man kan ændre på?


> I nogle tilfælde betyder forskellen ikke noget.
>
> Men i andre tilfælde kan det betyde noget.
>
> Bertel har allerede givet et eksempel på at det betyder
> noget, nemlig hvis man vil ændre i strengen.

Jeg kan sagtens ændre min streng i begge tilfælde uden at blive
overrendt med
segmentation faults eller nogen andre indikationer på problemer - kan du
demonstrere forskellen i kode?

MVH

Mads

Martin Jørgensen (20-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 20-05-06 14:06

Mads Bahrt wrote:
> Arne Vajhøj skrev:
-snip-

>>> Når du skriver:
>>>
>>>> char* streng = "Strenge-streng";
>>>
>>> Er det fuldkommen ækvivalent - det er blot to notationer for det
>>> samme. Der er ingen forskel på char * og char[] - begge er pointere.
>>
>>
>> Nej - det er ikke ækvivalent.
>>
>> Det første giver sizeof(streng) bytes i en RW memory sektion.
>>
>> Det andet giver sizeof(streng) bytes i en RO memory sektion
>> og sizeof(char*) bytes i en RW memory sektion.
>
>
> Var det lidt hurtigt skrevet, eller er vi uenige i at der i begge
> tilfælde skabes en char * som man kan ændre på?
>
>
>> I nogle tilfælde betyder forskellen ikke noget.
>>
>> Men i andre tilfælde kan det betyde noget.
>>
>> Bertel har allerede givet et eksempel på at det betyder
>> noget, nemlig hvis man vil ændre i strengen.
>
>
> Jeg kan sagtens ændre min streng i begge tilfælde uden at blive
> overrendt med
> segmentation faults eller nogen andre indikationer på problemer - kan du
> demonstrere forskellen i kode?

Jeg tror også jeg bedst forstår det med noget kode...


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Arne Vajhøj (20-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 20-05-06 14:40

Mads Bahrt wrote:
> Arne Vajhøj skrev:
>> Nej - det er ikke ækvivalent.
>>
>> Det første giver sizeof(streng) bytes i en RW memory sektion.
>>
>> Det andet giver sizeof(streng) bytes i en RO memory sektion
>> og sizeof(char*) bytes i en RW memory sektion.
>
> Var det lidt hurtigt skrevet, eller er vi uenige i at der i begge
> tilfælde skabes en char * som man kan ændre på?

Nej. Det er vi absolut ikke enige i.

>> I nogle tilfælde betyder forskellen ikke noget.
>>
>> Men i andre tilfælde kan det betyde noget.
>>
>> Bertel har allerede givet et eksempel på at det betyder
>> noget, nemlig hvis man vil ændre i strengen.
>
> Jeg kan sagtens ændre min streng i begge tilfælde uden at blive
> overrendt med
> segmentation faults eller nogen andre indikationer på problemer - kan du
> demonstrere forskellen i kode?

#include <stdio.h>

char s1[] = "ABCDEFGHIJ";
char s2[] = "ABCDEFGHIJ";

int main()
{
printf("%d\n",sizeof(s1));
s1[9] = 'X';
printf("%s\n",s1);
printf("%s\n",s2);
return 0;
}

udskriver:

11
ABCDEFGHIX
ABCDEFGHIJ

#include <stdio.h>

char *s1 = "ABCDEFGHIJ";
char *s2 = "ABCDEFGHIJ";

int main()
{
printf("%d\n",sizeof(s1));
s1[9] = 'X';
printf("%s\n",s1);
printf("%s\n",s2);
return 0;
}

gør lidt forskelligt afhængig af compiler, compiler
switches og vindretningen.

A)

udskriver:

4
og crasher

B)

udskriver:

4
ABCDEFGHIX
ABCDEFGHIJ

C)

udskriver:

4
ABCDEFGHIX
ABCDEFGHIX

gcc er ret konsekvent til vælge A (medmindre man angiver
-fwritable-strings) og koden er nem at overskue:

den første kode giver:

..globl _s1
   .data
_s1:
   .ascii "ABCDEFGHIJ\0"
..globl _s2
_s2:
   .ascii "ABCDEFGHIJ\0"

den anden kode giver:

..globl _s1
   .text
LC0:
   .ascii "ABCDEFGHIJ\0"
   .data
   .align 4
_s1:
   .long   LC0
..globl _s2
   .align 4
_s2:
   .long   LC0

Arne


Arne Vajhøj (20-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 20-05-06 14:45

Arne Vajhøj wrote:
> Mads Bahrt wrote:
>> Arne Vajhøj skrev:
>>> Nej - det er ikke ækvivalent.
>>>
>>> Det første giver sizeof(streng) bytes i en RW memory sektion.
>>>
>>> Det andet giver sizeof(streng) bytes i en RO memory sektion
>>> og sizeof(char*) bytes i en RW memory sektion.
>>
>> Var det lidt hurtigt skrevet, eller er vi uenige i at der i begge
>> tilfælde skabes en char * som man kan ændre på?
>
> Nej. Det er vi absolut ikke enige i.

http://c-faq.com/aryptr/aryptr2.html

Arne

Mads Bahrt (20-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 20-05-06 22:42

Arne Vajhøj skrev:
> Arne Vajhøj wrote:
>> Mads Bahrt wrote:
>>> Arne Vajhøj skrev:
>>>> Nej - det er ikke ækvivalent.
>>>>
>>>> Det første giver sizeof(streng) bytes i en RW memory sektion.
>>>>
>>>> Det andet giver sizeof(streng) bytes i en RO memory sektion
>>>> og sizeof(char*) bytes i en RW memory sektion.
>>>
>>> Var det lidt hurtigt skrevet, eller er vi uenige i at der i begge
>>> tilfælde skabes en char * som man kan ændre på?
>>
>> Nej. Det er vi absolut ikke enige i.
>
> http://c-faq.com/aryptr/aryptr2.html
>
> Arne
Så lærte jeg også noget i dag.....

MVH
Mads

Martin Jørgensen (20-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 20-05-06 19:47

Arne Vajhøj wrote:
-snip-

> den første kode giver:
>
> .globl _s1
> .data
> _s1:
> .ascii "ABCDEFGHIJ\0"
> .globl _s2
> _s2:
> .ascii "ABCDEFGHIJ\0"
>
> den anden kode giver:
>
> .globl _s1
> .text
> LC0:
> .ascii "ABCDEFGHIJ\0"
> .data
> .align 4
> _s1:
> .long LC0
> .globl _s2
> .align 4
> _s2:
> .long LC0

Hvad er det for noget kode?


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Arne Vajhøj (20-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 20-05-06 21:00

Martin Jørgensen wrote:
> Arne Vajhøj wrote:
>> den første kode giver:
>>
>> .globl _s1
>> .data
>> _s1:
>> .ascii "ABCDEFGHIJ\0"
>> .globl _s2
>> _s2:
>> .ascii "ABCDEFGHIJ\0"
>>
>> den anden kode giver:
>>
>> .globl _s1
>> .text
>> LC0:
>> .ascii "ABCDEFGHIJ\0"
>> .data
>> .align 4
>> _s1:
>> .long LC0
>> .globl _s2
>> .align 4
>> _s2:
>> .long LC0
>
> Hvad er det for noget kode?

Den assembler kode som compileren genererer.

Arne

Michael Rasmussen (18-05-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 18-05-06 19:01

On Thu, 18 May 2006 19:39:40 +0200, Eric Jensen wrote:

>
> Jeg håber den jeg lige har smidt, for 2 minutter siden var meningsfuld :)
>
Bogstaveligt betyder string literal en streng af bogstaver. Mere
obskurt: en samling bogstaver forbundet med hinanden ved hjælp af en
streng.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Martin Jørgensen (18-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 18-05-06 18:46

Bertel Brander wrote:
> Martin Jørgensen wrote:
>
>> Hej,
>>
>> I C-standarden og adskillige gange i comp.lang.c og lignende steder
>> har jeg flere gange set udtrykket: "string literal"...
>>
>> F.eks. står der i vistnok i C-standarden afsnit "6.4.9 Comments" at:
>>
>> "a//b" // four-character string literal
>>
>> Hvad hedder det (literal) på dansk?
>
>
> Det hedder en string literal på dansk.
>
> Jeg har aldrig hørt nogen meningsfuld oversættelse.
>
> At kalde det en streng konstant er misvisende.

Men hvad betyder det så, sagt på en anden måde med nogen andre ord? En
streng...... et-eller-andet?


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Bertel Brander (18-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 18-05-06 19:19

Martin Jørgensen wrote:

> Men hvad betyder det så, sagt på en anden måde med nogen andre ord? En
> streng...... et-eller-andet?

Hvis man skriver:
int x = 5;
Hvad er 5 så, en int konstant eller en literal int, eller ...?

På samme måde med:
const char *s = "Whatever";
Hvad er "Whatever" så?

Jeg vælger at kalde det en streng literal, for at skelne den fra:
const char* p1 = ...
const char p2[] = ...
const std::string p3 = ...
osv.

Skulle man oversætte det skulle det være "bogstavelig streng", men
det lyder for fjollet.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Bertel Lund Hansen (18-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-05-06 20:05

Bertel Brander skrev:

> Hvis man skriver:
> int x = 5;
> Hvad er 5 så, en int konstant eller en literal int, eller ...?

5 må være en numeral hvis vi skal bruge fremmedord, men jeg har
slrig oplevet at jeg menglede den betegnelse.

> Jeg vælger at kalde det en streng literal, for at skelne den fra:
> const char* p1 = ...
> const char p2[] = ...
> const std::string p3 = ...
> osv.

Det giver også mening.

> Skulle man oversætte det skulle det være "bogstavelig streng", men
> det lyder for fjollet.

Det gør det da ikke på engelsk. Hvorfor så på dansk?

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Mads Bahrt (18-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 18-05-06 22:03

Bertel Lund Hansen skrev:
> Bertel Brander skrev:
>
>> Hvis man skriver:
>> int x = 5;
>> Hvad er 5 så, en int konstant eller en literal int, eller ...?
>
> 5 må være en numeral hvis vi skal bruge fremmedord, men jeg har
> slrig oplevet at jeg menglede den betegnelse.
>
>> Jeg vælger at kalde det en streng literal, for at skelne den fra:
>> const char* p1 = ...
>> const char p2[] = ...
>> const std::string p3 = ...
>> osv.
>
> Det giver også mening.
>
>> Skulle man oversætte det skulle det være "bogstavelig streng", men
>> det lyder for fjollet.
>
> Det gør det da ikke på engelsk. Hvorfor så på dansk?
>
Jeg tror du misforstår ordet literal. Det betyder netop "bogstavelig",
og har ikke noget at gøre med at det er sat sammen af bogstaver, men at
det er det bogstavelige indhold angivet ved compile-time der skal
kopieres ind i variablen. Derfor kan man også sagtens snakke om int
literals og float literals.

int myliteralint = 5;//5-tallet er en int literal
float myliteralfloat = 3.14//3.14 er i dette tilfælde en literal
char *myliteralstring = "Hej"//Hej er en literal string

Literal bruges i min forståelse dermed blot til at beskrive hvad det er
man kopierer fra når man i programkoden sætter en variabel til noget der
er defineret ved compiletime i kildekoden.

MVH

Mads

Mads Bahrt (18-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 18-05-06 22:05

Jeg har netop slået det op på dictionary.com:

<programming> A constant made available to a process, by
inclusion in the executable text. Most modern systems do not
allow texts to modify themselves during execution, so literals
are indeed constant; their value is written at compile-time
and is read-only at run time.

In contrast, values placed in variables or files and accessed
by the process via a symbolic name, can be changed during
execution. This may be an asset. For example, messages can
be given in a choice of languages by placing the translation
in a file.

Literals are used when such modification is not desired. The
name of the file mentioned above (not its content), or a
physical constant such as 3.14159, might be coded as a
literal. Literals can be accessed quickly, a potential
advantage of their use.

Eric Jensen (18-05-2006)
Kommentar
Fra : Eric Jensen


Dato : 18-05-06 22:12
Arne Vajhøj (19-05-2006)
Kommentar
Fra : Arne Vajhøj


Dato : 19-05-06 03:01

Eric Jensen wrote:
> http://en.wikipedia.org/wiki/String_literal

Hvilket leder til den danske oversættelse:

"streng værdi"

som nok er den bedst mulige.

Jeg kan ihvertfald bedre lide den en streng konstant,
hvilket giver er masse associationer til const keyword
og den slags.

Blandt programmører vil man nok foretrække ikke
at oversætte det, da string literal er et kendt
meget veldefineret begreb.

Arne

Bertel Lund Hansen (19-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-05-06 13:23

Arne Vajhøj skrev:

> "streng værdi"

Jeg synes det er strengt at I ikke skriver sammen.

Det hedder "strengkonstant", "strengværdi", "strengliteral" osv.

Normalt kommenterer jeg naturligvis ikke skrivefejl, men i
programmering og matematik bruger man ordet "streng" til andet
end tekster. Derfor kan det blive forvirrende.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Kent Friis (19-05-2006)
Kommentar
Fra : Kent Friis


Dato : 19-05-06 15:12

Den Fri, 19 May 2006 14:23:23 +0200 skrev Bertel Lund Hansen:
> Arne Vajhøj skrev:
>
>> "streng værdi"
>
> Jeg synes det er strengt at I ikke skriver sammen.
>
> Det hedder "strengkonstant", "strengværdi", "strengliteral" osv.

Men "en streng lærer".

> Normalt kommenterer jeg naturligvis ikke skrivefejl, men i
> programmering og matematik bruger man ordet "streng" til andet
> end tekster. Derfor kan det blive forvirrende.

Også i alm. dansk har ordet en hel anden betydning når det står foran
et navneord, med mellemrum imellem. Så bliver det nemlig til et
tillægsord.

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Martin Jørgensen (18-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 18-05-06 23:36

Mads Bahrt wrote:
> Bertel Lund Hansen skrev:
-snip-

> int myliteralint = 5;//5-tallet er en int literal

Hvorfor ikke bare en int? Det kan da ligeså godt være en int, IMO.

> float myliteralfloat = 3.14//3.14 er i dette tilfælde en literal

Hellere bare en "float", IMO.

> char *myliteralstring = "Hej"//Hej er en literal string

Hellere bare en "string", IMO.

> Literal bruges i min forståelse dermed blot til at beskrive hvad det er
> man kopierer fra når man i programkoden sætter en variabel til noget der
> er defineret ved compiletime i kildekoden.

Man kan jo ikke gøre andet, fordi ellers brokker compileren sig. Der er
ingen grund til at kalde noget for literal, hvis ikke det ændrer
betydningen lidt så der må i det mindste være en forskel på en string og
en string literal.

Men jeg er blevet så klog at en string literal åbenbart er en konstant:
"Literals are used when such modification is not desired."

Man burde bare kalde det "a constant string". Jeg syntes ikke rigtigt
jeg er blevet meget klogere endnu. Andre der er blevet klogere?


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Mads Bahrt (19-05-2006)
Kommentar
Fra : Mads Bahrt


Dato : 19-05-06 01:19

Martin Jørgensen skrev:
>> Literal bruges i min forståelse dermed blot til at beskrive hvad det
>> er man kopierer fra når man i programkoden sætter en variabel til
>> noget der er defineret ved compiletime i kildekoden.
>
> Man kan jo ikke gøre andet, fordi ellers brokker compileren sig. Der er
> ingen grund til at kalde noget for literal, hvis ikke det ændrer
> betydningen lidt så der må i det mindste være en forskel på en string og
> en string literal.

Jo - du kunne i stedet for at indlæse den fra noget så statisk som den
binære kode indlæse initialiseringsværdierne fra en separat
indstillingsfil. Derved ville du ikke bruge literals. Man kan også sige
at Literals er når der står en værdi i kildeteksten.

MVH

Mads


Martin Jørgensen (19-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 19-05-06 23:27

Mads Bahrt wrote:
> Martin Jørgensen skrev:
>
>>> Literal bruges i min forståelse dermed blot til at beskrive hvad det
>>> er man kopierer fra når man i programkoden sætter en variabel til
>>> noget der er defineret ved compiletime i kildekoden.
>>
>>
>> Man kan jo ikke gøre andet, fordi ellers brokker compileren sig. Der
>> er ingen grund til at kalde noget for literal, hvis ikke det ændrer
>> betydningen lidt så der må i det mindste være en forskel på en string
>> og en string literal.
>
>
> Jo - du kunne i stedet for at indlæse den fra noget så statisk som den
> binære kode indlæse initialiseringsværdierne fra en separat
> indstillingsfil. Derved ville du ikke bruge literals. Man kan også sige
> at Literals er når der står en værdi i kildeteksten.

Det var en bedre forklaring... Og samtidigt skal det vist være en
pointer til char...


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Martin Jørgensen (18-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 18-05-06 23:26

Bertel Brander wrote:
> Martin Jørgensen wrote:
>
>> Men hvad betyder det så, sagt på en anden måde med nogen andre ord? En
>> streng...... et-eller-andet?
>
>
> Hvis man skriver:
> int x = 5;
> Hvad er 5 så, en int konstant eller en literal int, eller ...?

En int.

> På samme måde med:
> const char *s = "Whatever";
> Hvad er "Whatever" så?

En streng/en string og ikke andet.

> Jeg vælger at kalde det en streng literal, for at skelne den fra:
> const char* p1 = ...

Const. pointer til char.

> const char p2[] = ...

Const char array.

> const std::string p3 = ...

En streng/en C++-string, ikke at forveksle med en C-string.

> osv.
>
> Skulle man oversætte det skulle det være "bogstavelig streng", men
> det lyder for fjollet.

Så er en string altså *altid* en string literal?

Kan man tale om en string literal, der ikke er en string? Det kan man
vel nok ikke, men jeg syntes ordet er overflødigt...



Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Bertel Brander (19-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 19-05-06 00:08

Martin Jørgensen wrote:
> Bertel Brander wrote:
>> Martin Jørgensen wrote:
>>
>>> Men hvad betyder det så, sagt på en anden måde med nogen andre ord?
>>> En streng...... et-eller-andet?
>>
>>
>> Hvis man skriver:
>> int x = 5;
>> Hvad er 5 så, en int konstant eller en literal int, eller ...?
>
> En int.

x er en int, 5 er ikke af samme type som x, så det kan være handy
at kunne skelne når man snakker kode. Man kan f.ex. ikke tage
adressen på en int literal.

> Så er en string altså *altid* en string literal?

Nej.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Bertel Brander (19-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 19-05-06 00:23


>> Så er en string altså *altid* en string literal?
>
> Nej.

Et lidt længere svar:

Alt hvad der er en læsbar række af bogstaver er en streng.

En streng kan gemmes i et char array, i noget hukommelse
allokeret med malloc eller new, i en std::string, i en
std::vector, en fil, en database, og sikkert andre steder.

Kun når du i koden skriver "whatever" er det en string literal.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Martin Jørgensen (19-05-2006)
Kommentar
Fra : Martin Jørgensen


Dato : 19-05-06 23:34

Bertel Brander wrote:
>
>>> Så er en string altså *altid* en string literal?
>>
>>
>> Nej.
>
>
> Et lidt længere svar:
>
> Alt hvad der er en læsbar række af bogstaver er en streng.
>
> En streng kan gemmes i et char array, i noget hukommelse
> allokeret med malloc eller new, i en std::string, i en
> std::vector, en fil, en database, og sikkert andre steder.
>
> Kun når du i koden skriver "whatever" er det en string literal.

Det passer vist alligevel ikke helt, fordi tidligere skrev nogen vist
noget med at man ikke kunne ændre en string literal, da den var konst.
Men efter den "nye" defintion må nedenstående jo være en string literal:

#include <stdio.h>

char streng[] = "Strenge-streng";


int main(void)
{
printf("%s\n", streng);
streng[5] = 'n';
printf("%s\n", streng);
return 0;
}

Så der er noget der stadigvæk ikke passer helt...


Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Ukendt (23-05-2006)
Kommentar
Fra : Ukendt


Dato : 23-05-06 00:53


>> Jeg vælger at kalde det en streng literal, for at skelne den fra:
>> const char* p1 = ...
>
> Const. pointer til char.

Nej konstant char, ikke konstant pointer

const char* p1 = ...
char * const p2;

Tip , læs disse erklæringer bagfra

1) p1 er en pointer (der ikke er const) til en CHAR DER ER KONST (gennem
denne pointer).
2) p2 er CONST POINTER til en char, (der ikke er const).


char arr[] = "asdf";

void testFunc(const char* p1 , char * const p2 , const char * const p3)
{
//p1[0] = 0; // error
p1 = 0;

p2[0] = 0;
//p2 = 0; // error

//p3[0] = 0; // error
//p3 = 0; // error

// http://c-faq.com/ansi/constptrconst.html

}


int main (void)
{
testFunc(arr,arr,arr);
return 0;
}



Eric Jensen (18-05-2006)
Kommentar
Fra : Eric Jensen


Dato : 18-05-06 18:37


"Martin Jørgensen" <unoder.spam@spam.jay.net> skrev i en meddelelse
news:fh6uj3-iir.ln1@news.tdc.dk...
> Hej,
>
> I C-standarden og adskillige gange i comp.lang.c og lignende steder har
> jeg flere gange set udtrykket: "string literal"...
>
> F.eks. står der i vistnok i C-standarden afsnit "6.4.9 Comments" at:
>
> "a//b" // four-character string literal
>
> Hvad hedder det (literal) på dansk?

string literal referere til den notation/måde man repræsentere en
string/tekst på i et computer program. dvs. inkl gåseøjne.

En ip addresse kan vises i dotted-notation (127.0.0.1).
dvs. notation er den måde ip addressen er repræsenteret på,
adskilt af punktum-tegn.

Så en string literal er sådan set noget tekst omgivet at gåseøjne:

const char *str = "String";

strcpy(target, "String");

Håber det var til, at forstå.

//eric



Eric Jensen (19-05-2006)
Kommentar
Fra : Eric Jensen


Dato : 19-05-06 10:36

Her er en ekstra en fra answers.com:

A letter or symbol that stands for itself as opposed to a feature, function,
or entity associated with it in a programming language: $ can be a symbol
that refers to the end of a line, but as a literal, it is a dollar sign.



Kim Schulz (20-05-2006)
Kommentar
Fra : Kim Schulz


Dato : 20-05-06 08:36

On Sat, 20 May 2006 00:34:20 +0200
Martin Jørgensen <unoder.spam@spam.jay.net> wrote:

> Bertel Brander wrote:
> >
> >>> Så er en string altså *altid* en string literal?
> >>
> >>
> >> Nej.
> >
> >
> > Et lidt længere svar:
> >
> > Alt hvad der er en læsbar række af bogstaver er en streng.
> >
> > En streng kan gemmes i et char array, i noget hukommelse
> > allokeret med malloc eller new, i en std::string, i en
> > std::vector, en fil, en database, og sikkert andre steder.
> >
> > Kun når du i koden skriver "whatever" er det en string literal.
>
> Det passer vist alligevel ikke helt, fordi tidligere skrev nogen vist
> noget med at man ikke kunne ændre en string literal, da den var
> konst. Men efter den "nye" defintion må nedenstående jo være en
> string literal:
>
> #include <stdio.h>
>
> char streng[] = "Strenge-streng";


her er højresiden en streng literal. alt andet har ikke noget med en
streng literal at gøre.

Per Abrahamsen (22-05-2006)
Kommentar
Fra : Per Abrahamsen


Dato : 22-05-06 12:25

Jeg tror faktisk det hedder en "indlejret streng".

Men (elektronhjerne-) dansk er ikke min bedste...

Bertel Brander (27-05-2006)
Kommentar
Fra : Bertel Brander


Dato : 27-05-06 00:06

Per Abrahamsen wrote:
> Jeg tror faktisk det hedder en "indlejret streng".

Jeg tror aldrig at jeg har hørt den udgave, og havde jeg
hørt det tror jeg at jeg ville have tænkt på noget andet.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Ukendt (23-05-2006)
Kommentar
Fra : Ukendt


Dato : 23-05-06 17:56

Jeg ville oversætte det til en 'ordret' eller 'bogstavelig' streng.
En string literal angives ordret (hardcoded) og adskiller sig således
fra andre strenge som bliver genereret når programmet køres.

Samme udtryk (literal) bruges i øvrigt også om tal.

Claus

Martin Jørgensen skrev:
> Hej,
>
> I C-standarden og adskillige gange i comp.lang.c og lignende steder har
> jeg flere gange set udtrykket: "string literal"...
>
> F.eks. står der i vistnok i C-standarden afsnit "6.4.9 Comments" at:
>
> "a//b" // four-character string literal
>
> Hvad hedder det (literal) på dansk?
>
>
> Best regards / Med venlig hilsen
> Martin Jørgensen
>

Ukendt (23-05-2006)
Kommentar
Fra : Ukendt


Dato : 23-05-06 22:58


> Samme udtryk (literal) bruges i øvrigt også om tal.
>

Kalder man det ikke tit en "immediate" i assembler programmering?
add ax,2 // "2" er en literal / immediate ? (bliver en del af opcoden)

(hmm OT ?)




Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste