Re: [Dev-C++] Help me.... strange char functions on MinGW
Open Source C & C++ IDE for Windows
Brought to you by:
claplace
|
From: Per W. <pw...@ia...> - 2008-08-03 22:17:52
|
In the old TurboC days, there where a lot of programs with void main() but
even then, the return value should have been int, to allow batch files to
test the ERRORLEVEL variable.
A program not returning with a explicit "return status" - or a call to
exit(status) - will have a return value of 0.
/pwm
On Mon, 4 Aug 2008, Eric wrote:
> No I think at the time it was right but maybe the rules have been changed
> and now it is wrong.
>
>
>
>
>
>
> ----- Original Message -----
> From: Per Westermark <pw...@ia...>
> To: Eric <er...@du...>
> Cc: <dev...@li...>
> Sent: Monday, August 04, 2008 5:47 AM
> Subject: Re: [Dev-C++] Help me.... strange char functions on MinGW
>
>
> "I was taught on day one of C/C++ to use 'void main()'"
>
> You where taught wrong.
>
> main() should always return int, _unless_ you are working with embedded
> programming, where there often is no OS to return back to.
>
> The return value from main() is the return value that the OS will receive
> back when the application ends, i.e. can be used by a batch file to decide
> how to continue.
>
> In this case, the compiler will default any missing type declarations to
> int, so:
> main() {
> }
>
> is a short form of:
> int main(void) {
> }
>
> However, it is strongly recommended to always speicfy the int type
> explicitly (except in relation to short, long or unsigned, in which case
> it is quite common to skip the 'int' part).
>
> /pwm
>
> On Sun, 3 Aug 2008, Eric wrote:
>
> > would it not be be a good idea get into a the practice of useing a bit
> more
> > than "main()"
> > to start the main function
> > I was taught on day one of C/C++ to use "void main()"
> >
> >
> > I know I am pulling out hairs here one by one when I should be giving a
> > complete hair cut.
> >
> >
> > maybe I should of re-leant a bit more on "strnset - strset - Set Bytes in
> > String" before replying to question
> >
> >
> > >From Eric
> >
> > ----- Original Message -----
> > From: Derek Clarke <de...@ci...>
> > To: Rafael Oliveira Lima <raf...@gm...>
> > Cc: <dev...@li...>
> > Sent: Sunday, August 03, 2008 10:05 AM
> > Subject: Re: [Dev-C++] Help me.... strange char functions on MinGW
> >
> >
> > When you type strset("TEST, TEST", 'c') you've pointed parameter s at
> > the static string "TEST, TEST". That string can be put in a read only
> > segment by the compiler, hence the access violation when you try and
> > write to it.
> >
> > Not all implementations will do the same thing, hence it works in some
> > circumstances.
> >
> > It is much better to keep writable data and read only initialisor data
> > apart.
> >
> > so:
> >
> > main()
> > {
> > static char str[] = "TEST, TEST";
> > printf("%s", strset(str, 'c') );
> > getchar();
> > }
> >
> > This might look superficially the same, but this time str and the
> > initialisor data "TEST, TEST" are two different things, and str will
> > definitely be writable.
> >
> > Also for(i = 0; s[i]; i++) is syntactically correct, but it's really bad
> > form.
> >
> > Better to write
> >
> > for(i = 0; s[i] != '\0' ; i++)
> >
> > making the test explicit.
> >
> >
> >
> >
> > On Sat, Aug 2, 2008 at 7:17 PM, Rafael Oliveira Lima
> > <raf...@gm...> wrote:
> > > Hi All.
> > >
> > > I'm learning C with Dev-C++ and MinGW and a wrote such function like
> this:
> > >
> > > #include <stdio.h>
> > >
> > > char *strset(char *s, char ch);
> > >
> > > main()
> > > {
> > > printf("%s", strset("TEST, TEST", 'c') );
> > > getchar();
> > > }
> > >
> > > char *strset(char *s, char ch)
> > > {
> > > int i;
> > >
> > > for(i = 0; s[i]; i++)
> > > s[i] = ch;
> > >
> > > return s;
> > > }
> > >
> > > that would have to fill the string argument with the char ('c') and
> print
> > > it.
> > >
> > > string: "TEST, TEST"
> > > result: "**************"
> > >
> > > But, I have a Access Violation, and program crashes.
> > >
> > > I've tried to compile in LCCWin32 and runs fine.
> > > Then, I've tried, again, to compile in mingw and ran on MSYS,
> suprise....
> > > works fine too.
> > >
> > > But in a DOS shell, the same mingw compiled program gives me a Access
> > > Violation... Why!!!!????
> > >
> > > Please Help...
> > > --
> > > Rafael Oliveira de Lima
> > >
> > > Técnico Eletrônico - Projectus NDT.
> >
>
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Dev-cpp-users mailing list
> Dev...@li...
> TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
|