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. Other Discussions
  3. The Weird and The Wonderful
  4. My introduction to "##"

My introduction to "##"

Scheduled Pinned Locked Moved The Weird and The Wonderful
careerhardwarequestion
24 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.
  • P peterchen

    I actually wanted to do that as a project to "learn XML", but just the basics were such a bumpy ride that I contracted some kind of XML allergy. So if you do: A R T I C L E ! ;)


    We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
    My first real C# project | Linkify!|FoldWithUs! | sighist

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

    Be careful what you ask for.

    A 1 Reply Last reply
    0
    • P PIEBALDconsult

      Correct you are, but should I? Or should it go in, perhaps, the XML/XSL forum? Or an article? Aw heck, here it is, you decide: state.xml

      <state Prefix="ST_" Type="sometype" >
      <State1>0x01</State1>
      <State2>0x02</State2>
      <State3>0x03</State3>
      </state>

      state.xsl

      <?xml version="1.0" encoding="ISO-8859-1"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
      <xsl:output omit-xml-declaration="yes" method="text"/>
      <xsl:template match="/">
      <xsl:for-each select="*">
      typedef enum {
      <xsl:for-each select="*">
      <xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>=<xsl:value-of select="."/>,
      <xsl:if test="position()=last()"><xsl:value-of select="../@Prefix"/>LAST=<xsl:value-of select="last()"/></xsl:if>
      </xsl:for-each>} <xsl:value-of select="name()"/>type ;
      <xsl:value-of select="@Type"/>xsl:text </xsl:text><xsl:value-of select="name()"/>info[] = {
      <xsl:for-each select="*">
      <xsl:if test="position()!=1">,</xsl:if>{"<xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>",0,0}
      </xsl:for-each>}
      </xsl:for-each>
      </xsl:template>
      </xsl:stylesheet>

      result

        typedef enum {
        ST\_State1=0x01,
          ST\_State2=0x02,
          ST\_State3=0x03,
          ST\_LAST=3} statetype ;
        sometype stateinfo\[\] = {
        {"ST\_State1",0,0}
        ,{"ST\_State2",0,0}
        ,{"ST\_State3",0,0}
        }
      

      As mentioned elsewhere, the counting of the entries in part two is unnecessary, but notice that here I set the value of ST_LAST to the number of entries.

      D Offline
      D Offline
      Dan Neely
      wrote on last edited by
      #16

      I call a WTF!:laugh:

      -- CleaKO The sad part about this instance is that none of the users ever said anything [about the problem]. Pete O`Hanlon Doesn't that just tell you everything you need to know about users?

      P 1 Reply Last reply
      0
      • P peterchen

        You got something here! At a certain point, complexity can be moved around between "participants", but it remains in the project. "clipping components together" can increase complexity by one (thinking on a logarithmic scale) If your target is, however, still two or three orders of complexity away, you are in trouble. I think the idea is to plug together the next layer's "small, primitive classes" from the layer below. However, plugging components may give you the robustness of an application, but components have much higher requirements to be pluggable. At each layer, you spend more and more glue code to fit things together. It helps to start with a "more skilled", higher level language (i.e. start at higher complexity already, so the gap gets smaller), or apply KISS to the project goals (but that's not always possible). Hmmm... no solution, nope.


        We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
        My first real C# project | Linkify!|FoldWithUs! | sighist

        T Offline
        T Offline
        Tristan Rhodes
        wrote on last edited by
        #17

        From my experience, combining the smallest atomic parts together to create another simple atomic part is simply part of good system design. I've encountered HUGE function classes which have masses of dependancies on other stuff and it's a complete nightmare to figure out. At least with lots of small components you can black box at each level and the whole system becomes that much simpler to comprehend. T

        ------------------------------- Carrier Bags - 21st Century Tumbleweed.

        1 Reply Last reply
        0
        • D Dan Neely

          I call a WTF!:laugh:

          -- CleaKO The sad part about this instance is that none of the users ever said anything [about the problem]. Pete O`Hanlon Doesn't that just tell you everything you need to know about users?

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

          What's your alternative of choice?

          1 Reply Last reply
          0
          • P PIEBALDconsult

            Be careful what you ask for.

            A Offline
            A Offline
            Anton Afanasyev
            wrote on last edited by
            #19

            PIEBALDconsult wrote:

            Be careful what you ask for.

            I believe this actually is a case where he wants to get what he wishes for..


            :badger:

            P 1 Reply Last reply
            0
            • A Anton Afanasyev

              PIEBALDconsult wrote:

              Be careful what you ask for.

              I believe this actually is a case where he wants to get what he wishes for..


              :badger:

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

              (He's probably the only one.)

              P 1 Reply Last reply
              0
              • P peterchen

                I actually wanted to do that as a project to "learn XML", but just the basics were such a bumpy ride that I contracted some kind of XML allergy. So if you do: A R T I C L E ! ;)


                We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
                My first real C# project | Linkify!|FoldWithUs! | sighist

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

                Wish granted, just submitted the article. (Now waiting for the tomatoes to start flying.)

                P 1 Reply Last reply
                0
                • P PIEBALDconsult

                  Wish granted, just submitted the article. (Now waiting for the tomatoes to start flying.)

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

                  Waiting for it to appear...


                  We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
                  My first real C# project | Linkify!|FoldWithUs! | sighist

                  1 Reply Last reply
                  0
                  • T Todd_s02

                    I was never one for the intricacies of the C preprocessor. On my latest project, apparently (or rather, unfortunately) someone is. An .h file has a bunch of definitions (real variable names changed to protect the innocent): statedefs.h: makeState(State1, 0x01) makeState(State2, 0x02) makeState(State3, 0x03) Odd, I think, but ok. Then I go look up "makeState". What the... 3 entries? That's not a good sign. Instance 1: #define makeState(NAME, NUM) ST_##NAME## = ##NUM##, typedef enum { #include "statedefs.h" ST_LAST } statetype; Instance 2: Embedded in the middle of a function(!) #undef makestate #define makeState(NAME, NUM) somevariable++; #include "statedefs.h" Instance 3: #define makestate(NAME, NUM) { "ST_"#NAME,0,0}, sometype stateinfo[] = { #include "statedefs.h" } There are no external programs being used, no weird autogeneration stuff.. the entire set of code is a replacement for: enum { ST_State1 = 1, ST_State2 = 2, ST_State3 = 3, ST_LAST } Most editors I've tried cannot tag it, due to the preprocessor concatenation used ("##" in instance 1). References don't work either. And this is one of the easier to read examples of preprocessor abuse... I just try and remind myself that code written this way makes it that much easier on my next job interview!

                    K Offline
                    K Offline
                    KarstenK
                    wrote on last edited by
                    #23

                    This looks like "Security through obscurity" or the writer of this code wants to write such mess. If this is the style of the writer he ist a danger for the company.X|

                    Greetings from Germany

                    1 Reply Last reply
                    0
                    • P PIEBALDconsult

                      (He's probably the only one.)

                      P Offline
                      P Offline
                      peterchen
                      wrote on last edited by
                      #24

                      :laugh: Yeah, maybe.

                      Agh! Reality! My Archnemesis![^]
                      | FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchy

                      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