From: Fay J. F C. AAC/W. <joh...@eg...> - 2003-10-27 19:06:25
|
I've been looking at some of the recent changes and notice where a string is now split across two lines: "start of character string ... " " ... line 2 of character string" Is this legal in C or is it strictly C++? If the latter, we need to back that out. John F. Fay joh...@eg... |
From: Stephen J B. <sj...@li...> - 2003-10-27 19:50:51
|
Fay John F Contr AAC/WMG wrote: > I've been looking at some of the recent changes and notice where a > string is now split across two lines: > > "start of character string ... " > " ... line 2 of character string" > > Is this legal in C or is it strictly C++? If the latter, we need to > back that out. It's been legal in C for quite a few years - and it's always been legal in C++. Two strings are concatenated (at compile time) if there are no intervening printable characters between them. Hence: "Hello" " World." ...is identical to: "Hello World." In the case you cited above, it's probably done like that to avoid having very long lines without using the evil backslash escape character before the newline. ----------------------------------------------------------------------- The second law of Frisbee throwing states: "Never precede any maneuver by a comment more predictive than "Watch this!"...it turns out that this also applies to writing Fragment Shaders. ----------------------------------------------------------------------- Steve Baker (817)619-2657 (Vox/Vox-Mail) L3Com/Link Simulation & Training (817)619-2466 (Fax) Work: sj...@li... http://www.link.com Home: sjb...@ai... http://www.sjbaker.org |
From: Richard R. <sf...@ol...> - 2003-10-27 21:29:12
|
On Mon, Oct 27, 2003 at 01:53:32PM -0600, Stephen J Baker wrote: > Fay John F Contr AAC/WMG wrote: > >I've been looking at some of the recent changes and notice where a > >string is now split across two lines: > > > > "start of character string ... " > > " ... line 2 of character string" > > > >Is this legal in C or is it strictly C++? If the latter, we need to > >back that out. > > It's been legal in C for quite a few years - and it's always been legal > in C++. Since at least 1989, I think. We're okay. > Two strings are concatenated (at compile time) if there are no intervening > printable characters between them. Implicit in the above, but worth stating explicitly: The strings must be string literals. > Hence: > > "Hello" " World." > > ...is identical to: > > "Hello World." > > In the case you cited above, it's probably done like that to avoid having > very long lines without using the evil backslash escape character before > the newline. Yes. That's the case here. (I remember splitting a line like that in some of the changes that I committed, so this is probably one of my changes that John is talking about.) It is also useful for macros sometimes. Is the \ escape of newlines legal in ANSI/ISO C strings? I know that pre-ANSI compilers supported it. I suspect that GNU C will still support it. But I thought that the practice was never endorsed by ANSI/ISO. -- "I probably don't know what I'm talking about." http://www.olib.org/~rkr/ |
From: Eric S. <er...@sa...> - 2003-10-27 21:41:45
|
Quoting Fay John F Contr AAC/WMG <joh...@eg...>: > I've been looking at some of the recent changes and notice where a string is > now split across two lines: > > "start of character string ... " > " ... line 2 of character string" > > Is this legal in C or is it strictly C++? If the latter, we need to back > that out. I believe that GNU C is deprecating multi-line string literals, though I'm not sure that they are doing so for this case. I've had to patch a few programs which use string literals as follows: "Here is the beginning where we began swimming in the long afternoon we looked at the moon" -sandalle -- PGP Key Fingerprint: FCFF 26A1 BE21 08F4 BB91 FAED 1D7B 7D74 A8EF DD61 http://search.keyserver.net:11371/pks/lookup?op=get&search=0xA8EFDD61 -----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/E/IT$ d-- s++:+>: a-- C++(+++) BL++++VIS>$ P+(++) L+++ E-(---) W++ N+@ o? K? w++++>-- O M-@ V-- PS+(+++) PE(-) Y++(+) PGP++(+) t+() 5++ X(+) R+(++) tv(--)b++(+++) DI+@ D++(+++) G>+++ e>+++ h---(++) r++ y+ ------END GEEK CODE BLOCK------ Eric Sandall | Source Mage GNU/Linux Developer er...@sa... | http://www.sourcemage.org/ http://eric.sandall.us/ | SysAdmin @ Inst. Shock Physics @ WSU http://counter.li.org/ #196285 | http://www.shock.wsu.edu/ ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. |
From: Richard R. <sf...@ol...> - 2003-10-27 22:39:31
|
On Mon, Oct 27, 2003 at 09:36:38PM +0000, Eric Sandall wrote: > Quoting Fay John F Contr AAC/WMG <joh...@eg...>: > > I've been looking at some of the recent changes and notice where a string is > > now split across two lines: > > > > "start of character string ... " > > " ... line 2 of character string" > > > > Is this legal in C or is it strictly C++? If the latter, we need to back > > that out. > > I believe that GNU C is deprecating multi-line string literals, though I'm not > sure that they are doing so for this case. I've had to patch a few programs > which use string literals as follows: > > "Here is the beginning > where we began swimming > in the long afternoon > we looked at the moon" Neither the original code nor the present code uses this construct, however. (I didn't even know that GNU C supported that---without so much as a backslash at the ends of lines?) -- "I probably don't know what I'm talking about." http://www.olib.org/~rkr/ |
From: Braden M. <br...@en...> - 2003-10-27 23:34:48
|
Quoting Eric Sandall <er...@sa...>: > Quoting Fay John F Contr AAC/WMG <joh...@eg...>: > > I've been looking at some of the recent changes and notice where a string > is > > now split across two lines: > > > > "start of character string ... " > > " ... line 2 of character string" > > > > Is this legal in C or is it strictly C++? If the latter, we need to back > > that out. > > I believe that GNU C is deprecating multi-line string literals, though I'm > not > sure that they are doing so for this case. "This is a multiline string literal." "This is two string literals " "on two lines." As others have noted, the usage that was inquired about is standard (C89); so it's a pretty safe bet that the gcc folks will leave well enough alone. > I've had to patch a few programs > which use string literals as follows: > > "Here is the beginning > where we began swimming > in the long afternoon > we looked at the moon" If you did something other than toss a few quotes in at the beginnings an endings of lines, you did too much work. ;-) -- Braden McDaniel e-mail: <br...@en...> <http://endoframe.com> Jabber: <br...@ja...> |
From: Eric S. <er...@sa...> - 2003-10-28 00:32:47
|
Quoting Braden McDaniel <br...@en...>: > Quoting Eric Sandall <er...@sa...>: > > I believe that GNU C is deprecating multi-line string literals, though I'm > > not > > sure that they are doing so for this case. > > "This is > a multiline string literal." > > "This is two string literals " > "on two lines." > > As others have noted, the usage that was inquired about is standard (C89); > so > it's a pretty safe bet that the gcc folks will leave well enough alone. I know the usages are different, but this was just an example I've run across of something that /used/ to work (even if it wasn't a standard) and no longer does with string literals (also note that my example only had two quotes total). I haven't tested the multi-line string literal, but figured I'd post what I'd found so far with using gcc 3.x (3.3.2 now) with some packages (I don't recall which ones specifically, but if needed I can do a search for which ones have been patched by the SMGL team). > > I've had to patch a few programs > > which use string literals as follows: > > > > "Here is the beginning > > where we began swimming > > in the long afternoon > > we looked at the moon" > > If you did something other than toss a few quotes in at the beginnings an > endings of lines, you did too much work. ;-) Didn't take too much work, figured I'd make it fun. :) -sandalle -- PGP Key Fingerprint: FCFF 26A1 BE21 08F4 BB91 FAED 1D7B 7D74 A8EF DD61 http://search.keyserver.net:11371/pks/lookup?op=get&search=0xA8EFDD61 -----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/E/IT$ d-- s++:+>: a-- C++(+++) BL++++VIS>$ P+(++) L+++ E-(---) W++ N+@ o? K? w++++>-- O M-@ V-- PS+(+++) PE(-) Y++(+) PGP++(+) t+() 5++ X(+) R+(++) tv(--)b++(+++) DI+@ D++(+++) G>+++ e>+++ h---(++) r++ y+ ------END GEEK CODE BLOCK------ Eric Sandall | Source Mage GNU/Linux Developer er...@sa... | http://www.sourcemage.org/ http://eric.sandall.us/ | SysAdmin @ Inst. Shock Physics @ WSU http://counter.li.org/ #196285 | http://www.shock.wsu.edu/ ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. |
From: Steve B. <sjb...@ai...> - 2003-10-28 01:08:37
|
Braden McDaniel wrote: > "This is > a multiline string literal." > > "This is two string literals " > "on two lines." Note quite. The first of those is a string literal WITH A NEWLINE IN IT. The second doesn't contain a newline. If you print the first one, it'll come out on two lines - if you print the second one, it'll come out all on one line. The old way to split a string literal is: "This is \ a multiline string literal" ...which has no newline in it because it's been escaped by the backslash. However, it's terribly error-prone because you can easily get an invisible space character on the end of the line after the '\' - which destroys the effect of the \ and results in an unwanted newline in the string. The other problem with both of the old way is that you can't indent them properly: while ( something ) { while ( something ) { if ( something ) { printf ( "Hello \ World.\n" ) ; } } } ...YUK! ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |
From: Richard R. <sf...@ol...> - 2003-10-27 22:19:15
|
On Mon, Oct 27, 2003 at 12:52:21PM -0600, Fay John F Contr AAC/WMG wrote: > I've been looking at some of the recent changes and notice where a string is > now split across two lines: > > "start of character string ... " > " ... line 2 of character string" > > Is this legal in C or is it strictly C++? If the latter, we need to back > that out. ...oh, BTW: Thanks for keeping a sharp eye out and checking on this. (^& I try to stick to "bog-standard" ANSI/ISO C, but everyone sometimes makes mistakes. (E.g., I somehow thought that M_PI was part of the ANSI C <math.h> until someone tried to compile with MSVC++ a program where I used M_PI. I was convinced that it had to be standard, but eventually found no support for this delusion. I don't know where I got it from...) -- "I probably don't know what I'm talking about." http://www.olib.org/~rkr/ |