Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct


    Qt World Summit: Early-Bird Tickets

    On the indexing of arrays and other little wonders

    The Lounge
    4
    24
    4494
    Loading More Posts
    • 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.
    • mrjj
      mrjj Lifetime Qt Champion @jsulm last edited by kshegunov

      And this is why normal people and programmer always talk past each other.
      We start counting at zero and the rest of humanity start with 1 :)

      Btw. I do have this case with PLCs.
      Their (internal) lists start a 1 and so when I transfer from c/c++ i have to manage that
      and hence I do not use index 0 in the c++ code as not to go crazy with +/- 1 all over.

      on c++ is also [X] on PLC and

      not [X+1]

      [Forked from http://forum.qt.io/topic/68625/qlist-index ~kshegunov]

      kshegunov Joel Bodenmann 2 Replies Last reply Reply Quote 0
      • kshegunov
        kshegunov Moderators @mrjj last edited by

        @mrjj

        We start counting at zero and the rest of humanity start with 1

        I would argue the rest of humanity is wrong ... but then I don't have the support to enforce a new counting. ;)

        I do have this case with PLCs.

        I've said it before and I'll say it again: don't use substandard controllers and/or compilers ... ;)

        on c++ is also [X] on PLC and

        not [X+1]

        Not only for debugging. I'd say you're just fine wasting a single element from the beginning instead of making a "minor" mistake changing offsets ... however I'm sure you'd agree that the OP's justification for doing that is somewhat iffy ...

        Read and abide by the Qt Code of Conduct

        1 Reply Last reply Reply Quote 1
        • Joel Bodenmann
          Joel Bodenmann @mrjj last edited by Joel Bodenmann

          @mrjj said:

          And this is why normal people and programmer always talk past each other.
          We start counting at zero and the rest of humanity start with 1 :)

          Actually, my hardware design professor (FPGAs and stuff) can't stand it if I/we start to enumerate with 0 instead of 1. Yes sure, one can now pull the argument whether people doing hardware design using tools like VHDL and Verilog are actually programmers but... do they count as "normal people"? :p
          It's just funny to see that a very decent engineer/professor doesn't like enumeration to start with zero.
          Next time I'll have that discussion with him (which is surprisingly often), I'll pull the argument that @kshegunov stated: It's the offset of the element :p

          Maybe we get too off-topic now.

          Industrial process automation software: https://simulton.com
          Embedded Graphics & GUI library: https://ugfx.io

          mrjj kshegunov 2 Replies Last reply Reply Quote 0
          • mrjj
            mrjj Lifetime Qt Champion @Joel Bodenmann last edited by

            @Joel-Bodenmann

            • Maybe we get too off-topic now

            the_ 1 Reply Last reply Reply Quote 3
            • the_
              the_ @mrjj last edited by

              @mrjj
              Can't you just move the topic to another sub forum where its not off topic anymore? ;)

              -- No support in PM --

              Joel Bodenmann mrjj 2 Replies Last reply Reply Quote 0
              • Joel Bodenmann
                Joel Bodenmann @the_ last edited by Joel Bodenmann

                That would probably be rather rude for the OP :p

                Industrial process automation software: https://simulton.com
                Embedded Graphics & GUI library: https://ugfx.io

                1 Reply Last reply Reply Quote 0
                • mrjj
                  mrjj Lifetime Qt Champion @the_ last edited by

                  @the_
                  well i could - but is it that off ?
                  Still about the wonders of zero index with some extra ;)

                  1 Reply Last reply Reply Quote 0
                  • kshegunov
                    kshegunov Moderators @Joel Bodenmann last edited by kshegunov

                    @Joel-Bodenmann said:

                    It's just funny to see that a very decent engineer/professor doesn't like enumeration to start with zero.

                    Everyone has the right to have no taste ...

                    I'll pull the argument that @kshegunov stated: It's the offset of the element :p

                    I thought this was common knowledge.

                    How is this:

                    int x[5];
                    x[2] = 0;
                    

                    different from:

                    *(x + 2) = 0;
                    

                    PS: Except for the extreme ugliness of the latter that is ... :)

                    Read and abide by the Qt Code of Conduct

                    Joel Bodenmann 1 Reply Last reply Reply Quote 0
                    • Joel Bodenmann
                      Joel Bodenmann @kshegunov last edited by Joel Bodenmann

                      @kshegunov This is probably the point where I can dump this one...

                      #include <iostream>
                      #include <string>
                      
                      int main()
                      {
                      	std::string a[] = {"Hello", "World"};
                      	
                      	std::cout << 0[a] << std::endl;
                      	std::cout << 1[a] << std::endl;
                      	
                      	return 0;
                      }
                      

                      This proves that operator[] is really nothing but an offset operator (well, one can overload it for classes, yes....).

                      Industrial process automation software: https://simulton.com
                      Embedded Graphics & GUI library: https://ugfx.io

                      kshegunov 1 Reply Last reply Reply Quote 0
                      • kshegunov
                        kshegunov Moderators @Joel Bodenmann last edited by kshegunov

                        @Joel-Bodenmann

                        Man, this:

                        std::cout << 0[a] << std::endl;
                        

                        shouldn't work even on Friday ...

                        By the way, the proper way to unnecessarily make things look unfathomable is to use fully qualified access:

                        std::cout << a.operator[] (0) << std::endl;
                        

                        :)

                        Read and abide by the Qt Code of Conduct

                        1 Reply Last reply Reply Quote 0
                        • Joel Bodenmann
                          Joel Bodenmann last edited by Joel Bodenmann

                          @kshegunov said:

                          By the way, the proper way to unnecessarily make things look unfathomable is to use fully qualified access:

                          std::cout << a.operator[] (0) << std::endl;
                          

                          Well, that won't work with plain arrays ;)
                          Also you can't annoy C people with that.

                          Industrial process automation software: https://simulton.com
                          Embedded Graphics & GUI library: https://ugfx.io

                          kshegunov 1 Reply Last reply Reply Quote 0
                          • kshegunov
                            kshegunov Moderators @Joel Bodenmann last edited by kshegunov

                            @Joel-Bodenmann
                            You youngsters and your requirements ... plain arrays are plain, they need no stinkin' (custom) operators in the first place ... :D

                            Also you can't annoy C people with that.

                            With this I agree completely, but they can still annoy you by naming their variables new, like this:

                            char new[5]; //< This always makes my day
                            

                            Read and abide by the Qt Code of Conduct

                            the_ Joel Bodenmann 2 Replies Last reply Reply Quote 0
                            • the_
                              the_ @kshegunov last edited by

                              char new[5]; //< This always makes my day
                              

                              Thats as hard as

                              public class if {
                              
                              } 
                              

                              ;)

                              -- No support in PM --

                              kshegunov 1 Reply Last reply Reply Quote 0
                              • Joel Bodenmann
                                Joel Bodenmann @kshegunov last edited by Joel Bodenmann

                                @kshegunov
                                What about #define float int? :p
                                If you hide stuff like this: #define if(x) you can truly fuck someone's day.

                                However, the most evil one might be this: #define struct union.

                                Industrial process automation software: https://simulton.com
                                Embedded Graphics & GUI library: https://ugfx.io

                                the_ 1 Reply Last reply Reply Quote 0
                                • the_
                                  the_ @Joel Bodenmann last edited by

                                  @Joel-Bodenmann

                                  Or try to

                                  #define true false
                                  

                                  in a global headerfile in a large project ;)

                                  -- No support in PM --

                                  1 Reply Last reply Reply Quote 1
                                  • kshegunov
                                    kshegunov Moderators @the_ last edited by

                                    @the_ said:

                                    public class if {
                                    
                                    } 
                                    

                                    Ouch! There's tons of weird stuff a C dev might do, like:

                                    struct class object;
                                    

                                    @Joel-Bodenmann

                                    Aha! We are bringing the heavy artillery, aren't we?

                                    Since the preprocessor is not part of the language, and it's run before anything else ... and it's just string substitution, you can make very ugly stuff, like:

                                    #define true 0
                                    #define false 1
                                    

                                    Read and abide by the Qt Code of Conduct

                                    Joel Bodenmann the_ 2 Replies Last reply Reply Quote 0
                                    • Joel Bodenmann
                                      Joel Bodenmann @kshegunov last edited by Joel Bodenmann

                                      @kshegunov

                                      Aha! We are bringing the heavy artillery, aren't we?

                                      No Sir, this is the heavy artillery:

                                      #define if(x) if((__LINE__ % > 500)^(x))
                                      

                                      Everything works well as long as the source doesn't grow larger than 500 lines.

                                      And if you want to keep people from fucking with your sources/algorithms, you can carefully write a program with this:

                                      #define if(x) if((__LINE__ % 5==0)^(x))
                                      

                                      If done right, your stuff will work fine for as long as nobody adds or removes a line.

                                      </topic>

                                      Industrial process automation software: https://simulton.com
                                      Embedded Graphics & GUI library: https://ugfx.io

                                      kshegunov 1 Reply Last reply Reply Quote 0
                                      • kshegunov
                                        kshegunov Moderators @Joel Bodenmann last edited by

                                        @Joel-Bodenmann

                                        This is (somewhat) tractable. My greatest clash with the preprocessor was when I was served with a "class" that defined a 256 item color table by means of members for each of 256 colors ... the properties, getters and setters were naturally defined through preprocessor macros. It was one of the low points of my life ... :)

                                        Read and abide by the Qt Code of Conduct

                                        1 Reply Last reply Reply Quote 0
                                        • the_
                                          the_ @kshegunov last edited by

                                          @kshegunov said:

                                          @the_ said:

                                          public class if {
                                          
                                          } 
                                          

                                          Ouch! There's tons of weird stuff a C dev might do, like:

                                          I think it was Java code where i found this crap :)

                                          -- No support in PM --

                                          kshegunov Joel Bodenmann 2 Replies Last reply Reply Quote 0
                                          • kshegunov
                                            kshegunov Moderators @the_ last edited by

                                            @the_

                                            I think it was Java code where i found this crap

                                            Well, Java is C++'s little sister, too bad her genes got screwed up and she turned out a freak ;)

                                            Read and abide by the Qt Code of Conduct

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post