Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Syntax Error

Syntax Error

Scheduled Pinned Locked Moved The Lounge
helpquestion
29 Posts 10 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Mircea NeacsuM Mircea Neacsu

    I would say that "technically", the preprocesor is part of the language (preprocessor is defined in K&R), hence #define is part of the program. However, I'm not going to start a war here about such minutia, and specially not with such nice people. :)

    Mircea

    Richard Andrew x64R Offline
    Richard Andrew x64R Offline
    Richard Andrew x64
    wrote on last edited by
    #16

    Would you care to discuss tabs v. spaces? :)

    The difficult we do right away... ...the impossible takes slightly longer.

    H 1 Reply Last reply
    0
    • Richard Andrew x64R Richard Andrew x64

      Would you care to discuss tabs v. spaces? :)

      The difficult we do right away... ...the impossible takes slightly longer.

      H Offline
      H Offline
      honey the codewitch
      wrote on last edited by
      #17

      *Python has entered the chat*

      Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

      1 Reply Last reply
      0
      • H honey the codewitch

        If it's not, then neither is #include

        Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

        P Offline
        P Offline
        PIEBALDconsult
        wrote on last edited by
        #18

        Correct. Pre-processor directives are resolved before the code reaches the actual C/C++ compiler. The output of whatever pre-processor(s) you use is the actual code. Or -- as I do -- use a C/C++ pre-processor to resolve directives I put in C# and pass the result to the C# compiler. But you know that.

        H 1 Reply Last reply
        0
        • P PIEBALDconsult

          Correct. Pre-processor directives are resolved before the code reaches the actual C/C++ compiler. The output of whatever pre-processor(s) you use is the actual code. Or -- as I do -- use a C/C++ pre-processor to resolve directives I put in C# and pass the result to the C# compiler. But you know that.

          H Offline
          H Offline
          honey the codewitch
          wrote on last edited by
          #19

          I do. I am open to the reasonable disagreement about whether or not the preprocessor is part of the language, even if not part of the compiler itself. I think either position is valid, depending on which rubber ruler you use, and so I'm not really about debating that, but I think that's the question here.

          Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

          P J 2 Replies Last reply
          0
          • Mircea NeacsuM Mircea Neacsu

            PIEBALDconsult wrote:

            an include can be specified at the command line for the compilers I use

            Interesting! I know how to specify an include path but not a file.

            PIEBALDconsult wrote:

            Maybe you haven't used Oracle's PRO*C or RDB's version for embedding SQL in C/C++ programs.

            No, never! I've been fortunate in that respect ;P The closest I got was using SQLITE :D

            Mircea

            P Offline
            P Offline
            PIEBALDconsult
            wrote on last edited by
            #20

            Mircea Neacsu wrote:

            but not a file

            If I recall correctly, with VAX/DEC/Compaq/HP C the switch is /FirstInclude. I don't have an installation of Microsoft's C/C++ compiler on this system -- nor Borland's C/C++ or GCC -- but I can try to have a look when I get home. MingW: An example from Implanting Common Code in Unrelated Classes[^] "C:\mingw\bin\cpp" -P -C -include "c:\batfiles\ImplantWarning.h" D__NAME_SPACE__=%3 -D__CLASS_NAME__=%4 -w "%1" "%2" I'm sure I have it for Microsoft's C/C++ compiler (cl.exe) as well. I have probably referred to it in the past. Oh!: Re: c program - C / C++ / MFC Discussion Boards[^] F:\Projects>cl.exe /nologo /FIstdio.h /DSEMI=; nosem.c

            Mircea NeacsuM 1 Reply Last reply
            0
            • D dandy72

              Agreed, but I'm not sure all tokenizers would be happy with the lack of a space, which in this case might be considered as significant as a punctuation character. But then, I suppose when you see something starting with "#include", the next character really should not be part of that token. Especially when it's a reserved character such as < or ", so I suppose the situation is easy enough to detect and allow.

              H Offline
              H Offline
              honey the codewitch
              wrote on last edited by
              #21

              It wouldn't be part of the token in most tokenizer implementations. "include" would be a preproc keyword.** ** or identifier if the tokenizer doesn't distinguish between idents and keywords as is often the case. Most of the time, whitespace is hidden during tokenization before the parser gets to it so the parser wouldn't really care if there was no whitespace unless the developer put in extra effort for it to care.

              Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

              1 Reply Last reply
              0
              • H honey the codewitch

                I do. I am open to the reasonable disagreement about whether or not the preprocessor is part of the language, even if not part of the compiler itself. I think either position is valid, depending on which rubber ruler you use, and so I'm not really about debating that, but I think that's the question here.

                Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                P Offline
                P Offline
                PIEBALDconsult
                wrote on last edited by
                #22

                Yep, but I think I further irk you by using it for purposes other than its original intent.

                H 1 Reply Last reply
                0
                • P PIEBALDconsult

                  Mircea Neacsu wrote:

                  but not a file

                  If I recall correctly, with VAX/DEC/Compaq/HP C the switch is /FirstInclude. I don't have an installation of Microsoft's C/C++ compiler on this system -- nor Borland's C/C++ or GCC -- but I can try to have a look when I get home. MingW: An example from Implanting Common Code in Unrelated Classes[^] "C:\mingw\bin\cpp" -P -C -include "c:\batfiles\ImplantWarning.h" D__NAME_SPACE__=%3 -D__CLASS_NAME__=%4 -w "%1" "%2" I'm sure I have it for Microsoft's C/C++ compiler (cl.exe) as well. I have probably referred to it in the past. Oh!: Re: c program - C / C++ / MFC Discussion Boards[^] F:\Projects>cl.exe /nologo /FIstdio.h /DSEMI=; nosem.c

                  Mircea NeacsuM Offline
                  Mircea NeacsuM Offline
                  Mircea Neacsu
                  wrote on last edited by
                  #23

                  Nice! You live, you learn.

                  Mircea

                  1 Reply Last reply
                  0
                  • P PIEBALDconsult

                    Yep, but I think I further irk you by using it for purposes other than its original intent.

                    H Offline
                    H Offline
                    honey the codewitch
                    wrote on last edited by
                    #24

                    I'm actually not really so concerned about that sort of thing or I wouldn't like C++ metaprogramming as much as I do, which is essentially using template in ways other than for that which it was designed.

                    Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                    1 Reply Last reply
                    0
                    • H honey the codewitch

                      I do. I am open to the reasonable disagreement about whether or not the preprocessor is part of the language, even if not part of the compiler itself. I think either position is valid, depending on which rubber ruler you use, and so I'm not really about debating that, but I think that's the question here.

                      Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                      J Offline
                      J Offline
                      jschell
                      wrote on last edited by
                      #25

                      Interesting. Is the preprocessor part of the language? What one can state specifically is that is part of the specification. Is there a formal definition of the language outside of the specification? From Stroustrup in the "Annotated C++ Reference Manual" (page 5) "A file is conceptually translated in several phases ... The first phase is preprocessing" So I would guess he would claim it is not C++ without the preprocessor.

                      H 1 Reply Last reply
                      0
                      • D dandy72

                        Agreed, but I'm not sure all tokenizers would be happy with the lack of a space, which in this case might be considered as significant as a punctuation character. But then, I suppose when you see something starting with "#include", the next character really should not be part of that token. Especially when it's a reserved character such as < or ", so I suppose the situation is easy enough to detect and allow.

                        J Offline
                        J Offline
                        jschell
                        wrote on last edited by
                        #26

                        dandy72 wrote:

                        Agreed, but I'm not sure all tokenizers would be happy with the lack of a space,

                        A C++ compiler is not compliant if it requires a space before the '<' The spec defines a preprocessor id as a '#' followed by a 'token' A token (section 2.1) must be one of the following - Identifier - keyword - literal - operator - other separators "...collectively 'white space')...are ignored except as they serve to separate tokens" So in the context of this the following is valid #include But the following would not be since the token in that case would be 'includeio' #includeio.h Keep in mind of course that this doesn't make 'includeio' valid. But just that as far as tokenization goes that is what would happen.

                        H D 2 Replies Last reply
                        0
                        • J jschell

                          dandy72 wrote:

                          Agreed, but I'm not sure all tokenizers would be happy with the lack of a space,

                          A C++ compiler is not compliant if it requires a space before the '<' The spec defines a preprocessor id as a '#' followed by a 'token' A token (section 2.1) must be one of the following - Identifier - keyword - literal - operator - other separators "...collectively 'white space')...are ignored except as they serve to separate tokens" So in the context of this the following is valid #include But the following would not be since the token in that case would be 'includeio' #includeio.h Keep in mind of course that this doesn't make 'includeio' valid. But just that as far as tokenization goes that is what would happen.

                          H Offline
                          H Offline
                          honey the codewitch
                          wrote on last edited by
                          #27

                          That was my assumption, but I didn't want to look it up because lazy. :laugh: Thanks.

                          Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                          1 Reply Last reply
                          0
                          • J jschell

                            Interesting. Is the preprocessor part of the language? What one can state specifically is that is part of the specification. Is there a formal definition of the language outside of the specification? From Stroustrup in the "Annotated C++ Reference Manual" (page 5) "A file is conceptually translated in several phases ... The first phase is preprocessing" So I would guess he would claim it is not C++ without the preprocessor.

                            H Offline
                            H Offline
                            honey the codewitch
                            wrote on last edited by
                            #28

                            I tend to agree with this take, but considering the C++ compiler eats postprocessed C++ implementation files (i don't want to get into modules and stuff) and doesn't understand preprocessed C++ I think there's room for a reasonable person to suggest that it's somewhat (for lack of a better term) orthogonal to the language.

                            Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                            1 Reply Last reply
                            0
                            • J jschell

                              dandy72 wrote:

                              Agreed, but I'm not sure all tokenizers would be happy with the lack of a space,

                              A C++ compiler is not compliant if it requires a space before the '<' The spec defines a preprocessor id as a '#' followed by a 'token' A token (section 2.1) must be one of the following - Identifier - keyword - literal - operator - other separators "...collectively 'white space')...are ignored except as they serve to separate tokens" So in the context of this the following is valid #include But the following would not be since the token in that case would be 'includeio' #includeio.h Keep in mind of course that this doesn't make 'includeio' valid. But just that as far as tokenization goes that is what would happen.

                              D Offline
                              D Offline
                              dandy72
                              wrote on last edited by
                              #29

                              jschell wrote:

                              A C++ compiler is not compliant if it requires a space before the '<'

                              There ya go. End of discussion. Thanks for pointing that out.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups