/ 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
Gratis software...
Fra : Lasse Madsen


Dato : 02-07-04 14:26



Copyright (C) 2004 Lasse Madsen

This program is free software; you can redistribute it and/or

modify it under the terms of the GNU General Public License

as published by the Free Software Foundation; either version 2

of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software Foundation,

Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.





#include <stdio.h>

void main(void)

{

printf("Hello World");

while (1);

}



 
 
Ivan Johansen (02-07-2004)
Kommentar
Fra : Ivan Johansen


Dato : 02-07-04 16:38

Lasse Madsen wrote:
>
> void main(void)

Dette er ikke gyldigt C eller C++. main() returnerer altid int.

Ivan Johansen

Ukendt (02-07-2004)
Kommentar
Fra : Ukendt


Dato : 02-07-04 23:23

"Ivan Johansen" <ng6@padowan.REMOVE.dk> skrev i en meddelelse
> Dette er ikke gyldigt C eller C++. main() returnerer altid int.

Den draft jeg har af C99 er lidt vægelsindet på dette punkt. Dels står der:

5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation
declares no
prototype for this function. It shall be defined with a return type of int
and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names
may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;8) or in some other implementation-defined manner.

samt:

5.1.2.2.3 Program termination
1 If the return type of the main function is a type compatible with int, a
return from the
initial call to the main function is equivalent to calling the exit function
with the value
returned by the main function as its argument;9) reaching the } that
terminates the main
function returns a value of 0. If the return type is not compatible with
int, the
termination status returned to the host environment is unspecified.

Afsnit 5.1.2.2.1 foreskriver at returtypen skal være "int" eller et alias.
Afsnit 5.1.2.2.3 beskæftiger sig med specialsituationer, hvor returtypen er
"int" - underforstået, at den ikke behøver være det. I Annex K.1 har vi:

K.1 Unspecified behaviour
- The termination status returned to the hosted environment if the return
type of main is not compatible with int (5.1.2.2.3).


I det konkrete tilfælde returnerer main() ikke, hvorfor returtypen ikke
bliver aktuel. Derfor er forbeholdet i K.1 heller ikke aktuelt. Et
tilsvarende forbehold i annex K.2 er heller ikke aktuelt. Jeg vil derfor
mene, at man kan argumentere for, at det er udefineret om det konkrete
eksempel vil compile, men hvis det compiler, så er opførslen ikke
udefineret.

mvh.
Martin



Bertel Brander (02-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 02-07-04 23:35

Martin M. Pedersen wrote:

> 5.1.2.2.1 Program startup
> 1 The function called at program startup is named main. The implementation
> declares no
> prototype for this function. It shall be defined with a return type of int

Opførslen er uspecificeret hvis returværden for main ikke er
kompatibel med en int, uanset om eller hvordan programmet terminerer.

/b

Ukendt (03-07-2004)
Kommentar
Fra : Ukendt


Dato : 03-07-04 00:02

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:40e5e29f$0$289$edfadb0f@dread12.news.tele.dk...
> > 5.1.2.2.1 Program startup
> > 1 The function called at program startup is named main. The
implementation
> > declares no
> > prototype for this function. It shall be defined with a return type of
int
> Opførslen er uspecificeret hvis returværden for main ikke er
> kompatibel med en int, uanset om eller hvordan programmet terminerer.

Det bliver meget en diskussion om kanselli-sprog det her. Lad os starte med
at blive enige om, at det er noget hø at skrive

Lad os starte med "It shall be defined". Det betyder jvf. C99 "If a 'shall'
or 'shall not' requirement that appears outside of a constraint is violated,
the behavior is undefined." Dvs. at det er udefineret, ikke uspecificeret -
der skelnes i afsnit 3.18 og 3.19. Er det det samme som ugyldigt? Det er
ikke decideret forbudt. Er det et conformant program? Måske. En "conforming
implementation" har lov til at acceptere det, og dermed falder vi ind under
"A conforming program is one that is acceptable to a conforming
implementation." i afsnit 4.

mvh.
Martin



Bertel Brander (03-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 03-07-04 00:17

Martin M. Pedersen wrote:

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
> news:40e5e29f$0$289$edfadb0f@dread12.news.tele.dk...
>
>>>5.1.2.2.1 Program startup
>>>1 The function called at program startup is named main. The
>
> implementation
>
>>>declares no
>>>prototype for this function. It shall be defined with a return type of
>
> int
>
>>Opførslen er uspecificeret hvis returværden for main ikke er
>>kompatibel med en int, uanset om eller hvordan programmet terminerer.
>
>
> Det bliver meget en diskussion om kanselli-sprog det her. Lad os starte med
> at blive enige om, at det er noget hø at skrive
>
Retur værdien for main() er uden tvivl det mest omdiskuterede emne
inden for C overhovedet.

For mig at se er det ret enkelt; du citerer selv:
"It shall be defined with a return type of int", og så er den sådan set
ikke længere.

/b

Lasse Madsen (04-07-2004)
Kommentar
Fra : Lasse Madsen


Dato : 04-07-04 22:46

> Dette er ikke gyldigt C eller C++. main() returnerer altid int.

Ikke i min compiler til embedded mikroprocessorer !

(CodevisionAVR)

M.v.h
Lasse Madsen



Bertel Brander (02-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 02-07-04 20:12

Lasse Madsen wrote:
> #include <stdio.h>
>
> void main(void)
>
> {
>
> printf("Hello World");
>
> while (1);
>
> }
>
>

Imponerende antal fejl i et så simpelt program,
der skal f.ex. tilføjes en '\n' til printf kaldet,
eller en fflush(stdout); hvis man vil være nogenlunde
sikker på at der er nogen der kan se det man har skrevet.
Håber ikke det er standaren for gratis software...

Jeg har altid foretrukket:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
while(printf("Hello World\n"));
return EXIT_SUCCESS;
}

/b

Bertel Brander (02-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 02-07-04 22:37

Bertel Brander wrote:
>
> Jeg har altid foretrukket:
>
Eller:

#include <stdio.h>
int main(void)
{
printf("Hello World\n") && main();
return 0;
}

/b

Ukendt (02-07-2004)
Kommentar
Fra : Ukendt


Dato : 02-07-04 23:33

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:40e5d4ea$0$276$edfadb0f@dread12.news.tele.dk...
> #include <stdio.h>
> int main(void)
> {
> printf("Hello World\n") && main();
> return 0;
> }

Den er ikke god i C++ jvf. ISO-14882 (C++98) afsnit 3.6.1:

"The function main shall not be used (3.2) within a program. The linkage
(3.5) of main is implementation-defined.".

Jeg kender ikke et tilsvarende forbehold i C standarden.

mvh.
Martin




Bertel Brander (03-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 03-07-04 00:12

Martin M. Pedersen wrote:
> "Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
> news:40e5d4ea$0$276$edfadb0f@dread12.news.tele.dk...
>
>>#include <stdio.h>
>>int main(void)
>>{
>> printf("Hello World\n") && main();
>> return 0;
>>}
>
>
> Den er ikke god i C++ jvf. ISO-14882 (C++98) afsnit 3.6.1:
>
> "The function main shall not be used (3.2) within a program. The linkage
> (3.5) of main is implementation-defined.".

Der er ingen stdio.h i C++, så programmet er pr. definition et
C program.


>
> Jeg kender ikke et tilsvarende forbehold i C standarden.

Jeg er ret sikker på at der ikke er noget sådan forbehold
i C-standarden.

/b

Ivan Johansen (03-07-2004)
Kommentar
Fra : Ivan Johansen


Dato : 03-07-04 12:51

Bertel Brander wrote:
> Der er ingen stdio.h i C++, så programmet er pr. definition et
> C program.

Jo, der er. Table 100 (Annex D.5) i C++ standarden viser at der er en
stdio.h i C++. Det anbefales dog at bruge cstdio i stedet med mindre
samme program også skal kunne compiles som C.

Ivan Johansen

Bertel Brander (03-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 03-07-04 15:18

Ivan Johansen wrote:
> Bertel Brander wrote:
>
>> Der er ingen stdio.h i C++, så programmet er pr. definition et
>> C program.
>
>
> Jo, der er. Table 100 (Annex D.5) i C++ standarden viser at der er en
> stdio.h i C++. Det anbefales dog at bruge cstdio i stedet med mindre
> samme program også skal kunne compiles som C.

Jeg lærer noget nyt hver dag. Med hvad er så pointen i at have
en cstdio ?

/b

Jonas Meyer (03-07-2004)
Kommentar
Fra : Jonas Meyer


Dato : 03-07-04 20:21

Bertel Brander wrote:
> Jeg lærer noget nyt hver dag. Med hvad er så pointen i at have
> en cstdio ?

Der ligger alle funktionerne i std::



Bertel Brander (04-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 04-07-04 00:17

Jonas Meyer wrote:
> Bertel Brander wrote:
>
>> Jeg lærer noget nyt hver dag. Med hvad er så pointen i at have
>> en cstdio ?
>
>
> Der ligger alle funktionerne i std::

"Sjovt" nok er der kun en af mine kompilere, BorlandC,
der putter funktionerne ind i namespace std::

g++ og Digital Mars har ikke noget imod at man skriver
std:: foran printf, VisualC++ nægter at kompile
hvis man gør.

/b

Lasse Madsen (04-07-2004)
Kommentar
Fra : Lasse Madsen


Dato : 04-07-04 22:48

Hej

> Imponerende antal fejl i et så simpelt program,

Hov hov !

> der skal f.ex. tilføjes en '\n' til printf kaldet,

Nææ det skal der bestemt ikke ...

> eller en fflush(stdout); hvis man vil være nogenlunde
> sikker på at der er nogen der kan se det man har skrevet.
> Håber ikke det er standaren for gratis software...

Kommer an på programmerings miljøet ...

> Jeg har altid foretrukket:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main(void)
> {
> while(printf("Hello World\n"));
> return EXIT_SUCCESS;
> }

Hvilket aldrig ville fungere (hensigtsmæssigt) på en embedded platform da du
ikke uden hazard kan retunere fra main ...

M.v.h.
Lasse



Bertel Brander (05-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 05-07-04 00:18

Lasse Madsen wrote:
> Hej
>
>
>>Imponerende antal fejl i et så simpelt program,
> Hov hov !

Bare rolig, jeg har set programmer med _mange_
flere fejl pr linie.

>
>
>>der skal f.ex. tilføjes en '\n' til printf kaldet,
>
> Nææ det skal der bestemt ikke ...
>
>
>>eller en fflush(stdout); hvis man vil være nogenlunde
>>sikker på at der er nogen der kan se det man har skrevet.
>>Håber ikke det er standaren for gratis software...
>
>
> Kommer an på programmerings miljøet ...

Ja, hvis man er sikker på at programmet _aldrig_ kommer
til at køre på en platform hvor det er nødvendigt, kan
man naturligvis være ligeglad.

> Hvilket aldrig ville fungere (hensigtsmæssigt) på en embedded platform da du
> ikke uden hazard kan retunere fra main ...
>

I et embedded (freestanding) miljø behøver man ikke en main.

/b

Peter Jensen (05-07-2004)
Kommentar
Fra : Peter Jensen


Dato : 05-07-04 11:42

Bertel Brander wrote:

>>> Imponerende antal fejl i et så simpelt program,
>>
>> Hov hov !
>
> Bare rolig, jeg har set programmer med _mange_ flere fejl pr linie.

Jeg kommer i tanke om et lille program en troll smed i en anden gruppe
engang. Tråden starter her:

<news:3d6111f1.0401261439.75572582@posting.google.com>

Ikke alene er det han prøver at opnå umuligt at gøre på en fornuftig
måde, men programmet har så mange fejl at man næsten kun kan tro at det
er lavet sådan med vilje ...

--
PeKaJe

"Microsoft Wheel. Now with 8 sides for a smoother ride."
   -- The Ghost in the Machine, in COLA

Nicolai Hansen (06-07-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 06-07-04 07:28

> <news:3d6111f1.0401261439.75572582@posting.google.com>
>
> Ikke alene er det han prøver at opnå umuligt at gøre på en fornuftig
> måde, men programmet har så mange fejl at man næsten kun kan tro at det
> er lavet sådan med vilje ...

//dont need any other headers because glibc is automatically there! See gnu.org
//i forget why. The manual is too long to waste time reading it.

Hans egen kommentar siger vist alt ;)

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

Månedens bedste
Årets bedste
Sidste års bedste