Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #71490

Re: C++ preprocessor and multi-line string literals

From boltar@nowhere.org
Newsgroups comp.lang.c++
Subject Re: C++ preprocessor and multi-line string literals
Date 2020-01-21 16:43 +0000
Organization Aioe.org NNTP Server
Message-ID <r079n4$1i90$1@gioia.aioe.org> (permalink)
References <qvpvvf$h2p$1@dont-email.me> <r04bcm$32j$2@adenine.netfront.net> <r04nfl$9c7$1@news.albasani.net> <r06cfk$27iu$1@adenine.netfront.net>

Show all headers | View raw


On Tue, 21 Jan 2020 08:24:22 -0000 (UTC)
Juha Nieminen <nospam@thanks.invalid> wrote:
>Bonita Montero <Bonita.Montero@gmail.com> wrote:
>>> How about the other way around? Is this valid C++ or not?
>>> 
>>> //------------------------------
>>> #include <iostream>
>>> 
>>> #define TEST R"#(line1
>>> line2
>>> line3
>>> )#"
>>> 
>>> int main()
>>> {
>>>      std::cout << TEST;
>>> }
>>> //------------------------------
>> 
>> Doesn't matter if this is valid or not because no one does
>> such stupid things.
>
>I am tempted to use less-than-pleasant words as a response, but I think
>I will abstain. Instead, I will present an actual real-life situation where
>such a thing is useful.
>
>When programming with something that uses OpenGL, and thus GLSL for shaders,
>the shaders are their own programming language inside strings. You could have
>these GLSL sources in separate files, or you could have them as string literals
>
>inside your program. The advantage of having them as string literals is that
>you don't need to include extraneous files in your project (which may even be
>easily modified by somebody), and you can build your strings from parts.
>
>If there's some common GLSL code that could be useful in several shaders, you
>can create string literales by concatenating separate ones. One easy way to do
>that is to use macros for the string literals containing common code.
>
>So you could have something like:
>
>#define GLSL_COMMON_FUNC R"#(
>float func(float) {
>  ... whatever ...
>}
>)#"

Not with Clang you can't:

t.c:3:27: warning: missing terminating '"' character [-Winvalid-pp-token]
#define GLSL_COMMON_FUNC R"#(
                          ^
t.c:7:1: error: expected identifier or '('
)#"
^
t.c:7:3: warning: missing terminating '"' character [-Winvalid-pp-token]
)#"

Is this a gcc extension?

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

C++ preprocessor and multi-line string literals Paavo Helde <myfirstname@osa.pri.ee> - 2020-01-16 17:37 +0200
  Re: C++ preprocessor and multi-line string literals Öö Tiib <ootiib@hot.ee> - 2020-01-16 09:46 -0800
    Re: C++ preprocessor and multi-line string literals Manfred <noname@add.invalid> - 2020-01-16 22:49 +0100
      Re: C++ preprocessor and multi-line string literals Öö Tiib <ootiib@hot.ee> - 2020-01-16 14:43 -0800
        Re: C++ preprocessor and multi-line string literals Manfred <invalid@add.invalid> - 2020-01-17 01:24 +0100
          Re: C++ preprocessor and multi-line string literals Öö Tiib <ootiib@hot.ee> - 2020-01-16 16:38 -0800
            Re: C++ preprocessor and multi-line string literals Manfred <invalid@add.invalid> - 2020-01-17 03:27 +0100
  Re: C++ preprocessor and multi-line string literals legalize+jeeves@mail.xmission.com (Richard) - 2020-01-16 20:07 +0000
  Re: C++ preprocessor and multi-line string literals Juha Nieminen <nospam@thanks.invalid> - 2020-01-20 13:53 +0000
    Re: C++ preprocessor and multi-line string literals Paavo Helde <myfirstname@osa.pri.ee> - 2020-01-20 18:31 +0200
    Re: C++ preprocessor and multi-line string literals Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-20 18:19 +0100
      Re: C++ preprocessor and multi-line string literals Juha Nieminen <nospam@thanks.invalid> - 2020-01-21 08:24 +0000
        Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-21 16:43 +0000
          Re: C++ preprocessor and multi-line string literals Paavo Helde <myfirstname@osa.pri.ee> - 2020-01-21 19:25 +0200
            Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-22 09:58 +0000
              Re: C++ preprocessor and multi-line string literals guinness.tony@gmail.com - 2020-01-22 02:11 -0800
                Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-22 10:24 +0000
                Re: C++ preprocessor and multi-line string literals James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-01-23 22:25 -0500
              Re: C++ preprocessor and multi-line string literals Paavo Helde <myfirstname@osa.pri.ee> - 2020-01-22 13:28 +0200
                Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-22 12:07 +0000
                Re: C++ preprocessor and multi-line string literals Öö Tiib <ootiib@hot.ee> - 2020-01-22 05:33 -0800
                Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-22 16:03 +0000
                Re: C++ preprocessor and multi-line string literals Öö Tiib <ootiib@hot.ee> - 2020-01-22 10:50 -0800
                Re: C++ preprocessor and multi-line string literals boltar@nowhere.org - 2020-01-23 09:22 +0000
                Re: C++ preprocessor and multi-line string literals Manfred <noname@add.invalid> - 2020-01-22 18:59 +0100
              Re: C++ preprocessor and multi-line string literals Juha Nieminen <nospam@thanks.invalid> - 2020-01-22 12:03 +0000

csiph-web