From: <no...@so...> - 2001-06-21 08:53:50
|
Bugs item #435055, was updated on 2001-06-21 01:53 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=100599&aid=435055&group_id=599 Category: C-Front End Group: None Status: Open Resolution: None Priority: 5 Submitted By: Bernhard Held (bernhardheld) Assigned to: Nobody/Anonymous (nobody) Summary: Escape at end of line: parse error Initial Comment: char *bug = "a" \ "b"; >parse error: token -> '"' ; column 13 ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=100599&aid=435055&group_id=599 |
From: Johan K. <joh...@id...> - 2001-06-22 16:44:41
|
> char *bug = "a" \ > "b"; Because gcc just warns you (stray '\' in program), I made sdcc to follow this approach. It still leaves the char \ *bug1="hallo"; that isn't catched, but that is another stroy I am working on. This also leaves the: char *b="hallo wie is daar"; and char *b=hallo \ wie is daar"; I don't agree with gcc here, it throws in \r\n for the first and for the second complaints about an "unknown escape sequence: '\' followed by char code 0xd" and does the same. Right now sdcc in both cases just inserts a \r, which I think is right. In the same run I made some progress with the linenumber reporting problem. Anyway, I heavely hacked SDCC.lex. And like Kevin always says, if it's broken you know how to blame :) Johan |
From: Kevin V. <ke...@vi...> - 2001-06-22 17:39:15
|
On 22-Jun-2001 Johan Knol wrote: >> char *bug = "a" \ >> "b"; > > Because gcc just warns you (stray '\' in program), I made sdcc to > follow > this approach. Really? I was suprised to find that this is perfectly legal ANSI C (you can line continuation with a backslash at the end-of-line anywhere in an ANSI C program, and the lines should be joined. My copy of H&S points out it is even legal to split keywords over lines like this, like so: if (i) { a(); } el\ se { b (); }; and I'm amazed to find that gcc handles this properly (I haven't tried SDCC...). So the above code should be identical to 'char *bug = "a" "b";', which is obviously legal, and shouldn't generate a warning (in gcc or SDCC). My version of gcc (egcs-2.91.66) doesn't give a warning, even with -Wall -ansi -pedantic. > It still leaves the > > char \ *bug1="hallo"; > > that isn't catched, but that is another stroy I am working on. No comment :-) > This also leaves the: > > char *b="hallo > wie is daar"; > > and > > char *b=hallo \ > wie is daar"; > > I don't agree with gcc here, it throws in \r\n for the first and for > the > second complaints about an "unknown escape sequence: '\' followed by > char > code 0xd" and does the same. Right now sdcc in both cases just inserts > a \r, > which I think is right. The first one is illegal in ANSI C (no linebreaks inside a string constant), so the compiler can do whatever it likes; if gcc wants to insert a \r\n, that's fine by me, and if SDCC wants to send e-mail to Bjarne Stroustrop threatening his life, that's ok too. So \r is just fine. The second one, though, is legal and should not insert anything: char *b = "just us \ chickens!"; is legal and should be the same as char *b = "just us chickens!"; Again, my version of gcc gets this right, with no warnings. But so does SDCC, so that's OK. Peace, Kevin |
From: Johan K. <joh...@id...> - 2001-06-22 20:07:27
|
> Again, my version of gcc gets this right, with no warnings. But so does > SDCC, so that's OK. Yeah, but sdcc throws in a \r that is not ansi if I understand you correct. I also have egcs-2.91.66, so I wonder why you don't see the warnings. Anyway, now we can get rid of the "\r\n" that didn't make sense to me anyway. I will make it so tomorrow, sleep well... Johan |