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