Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Warning when using qint64 with PRIi64 on 64 bit linux

Warning when using qint64 with PRIi64 on 64 bit linux

Scheduled Pinned Locked Moved Unsolved General and Desktop
17 Posts 3 Posters 4.7k Views
  • 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.
  • m.sueM m.sue

    Hi @DuBu

    It works if you use int64_t instead of qint64.

    -Michael.

    DuBuD Offline
    DuBuD Offline
    DuBu
    wrote on last edited by
    #7

    @m.sue I can't change that, it's code from Qt (i.e QElapsedTimer::elapsed()).

    m.sueM 1 Reply Last reply
    0
    • DuBuD DuBu

      @m.sue I can't change that, it's code from Qt (i.e QElapsedTimer::elapsed()).

      m.sueM Offline
      m.sueM Offline
      m.sue
      wrote on last edited by
      #8

      Hi @DuBu

      You could probably cast it to int64_t. It is ugly, though.

      -Michael.

      1 Reply Last reply
      0
      • jsulmJ jsulm

        @DuBu Use ll instead of li, see http://www.cplusplus.com/reference/cstdio/printf/

        DuBuD Offline
        DuBuD Offline
        DuBu
        wrote on last edited by
        #9

        @jsulm Yes, but I want to use the PRI macros.

        1 Reply Last reply
        0
        • DuBuD Offline
          DuBuD Offline
          DuBu
          wrote on last edited by
          #10

          I wonder what is wrong, the qint64 which is actually a long long int or the PRIi64 macro which is actually a "li"?

          m.sueM 1 Reply Last reply
          0
          • DuBuD DuBu

            I wonder what is wrong, the qint64 which is actually a long long int or the PRIi64 macro which is actually a "li"?

            m.sueM Offline
            m.sueM Offline
            m.sue
            wrote on last edited by m.sue
            #11

            Hi @DuBu

            PRIi64 together with int64_t is "lli", together with qint64 it is "li". The PRI macros probably do not know what to do about qint64. Maybe it's a compiler bug.

            -Michael.

            1 Reply Last reply
            0
            • DuBuD Offline
              DuBuD Offline
              DuBu
              wrote on last edited by
              #12

              Ok, thanks guys! I ended up by using PRIi64 and casting qint64 to int64_t when necessary.

              m.sueM 1 Reply Last reply
              0
              • DuBuD DuBu

                Ok, thanks guys! I ended up by using PRIi64 and casting qint64 to int64_t when necessary.

                m.sueM Offline
                m.sueM Offline
                m.sue
                wrote on last edited by
                #13

                Hi @DuBu

                Qt could fix it by defining typedef int64_t qint64; instead of typedef long long qint64; on Linux. But, of course, there could be some side effects of that change that I do not see. Maybe some supported compiler does not yet have the int64_t type.

                -Michael.

                jsulmJ 1 Reply Last reply
                0
                • m.sueM m.sue

                  Hi @DuBu

                  Qt could fix it by defining typedef int64_t qint64; instead of typedef long long qint64; on Linux. But, of course, there could be some side effects of that change that I do not see. Maybe some supported compiler does not yet have the int64_t type.

                  -Michael.

                  jsulmJ Online
                  jsulmJ Online
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #14

                  @m.sue long long is not necessarily always 64 bit. The length of integral types in C/C++ isn't specified exactly. The only thing specified is:

                  char <= short <= int <= long int <= long long
                  

                  The exact size of each type depends on platform and compiler.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  m.sueM 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @m.sue long long is not necessarily always 64 bit. The length of integral types in C/C++ isn't specified exactly. The only thing specified is:

                    char <= short <= int <= long int <= long long
                    

                    The exact size of each type depends on platform and compiler.

                    m.sueM Offline
                    m.sueM Offline
                    m.sue
                    wrote on last edited by
                    #15

                    Hi @jsulm

                    Ok, but as int64_t is guarantueed to be 64-bit, it is not guarantueed to be defined for every compiler. So it's no good choice for qint64.

                    Nevertheless Qt should find a way to use it without warnings in printf with the new PRI macros, They are just about invented to use with long longs that are or are not 64-bit depending on the compiler/machine.

                    -Michael.

                    jsulmJ 1 Reply Last reply
                    0
                    • m.sueM m.sue

                      Hi @jsulm

                      Ok, but as int64_t is guarantueed to be 64-bit, it is not guarantueed to be defined for every compiler. So it's no good choice for qint64.

                      Nevertheless Qt should find a way to use it without warnings in printf with the new PRI macros, They are just about invented to use with long longs that are or are not 64-bit depending on the compiler/machine.

                      -Michael.

                      jsulmJ Online
                      jsulmJ Online
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by jsulm
                      #16

                      @m.sue Well, qint64 is guaranteed to be 64 bit, so you cannot use long long to typedef it.
                      int64_t is defined in C++11 and as Qt requires C++11 since quite some time it is perfectly valid to use int64_t in my opinion.
                      And why use printf in C++ at all?

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      DuBuD 1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @m.sue Well, qint64 is guaranteed to be 64 bit, so you cannot use long long to typedef it.
                        int64_t is defined in C++11 and as Qt requires C++11 since quite some time it is perfectly valid to use int64_t in my opinion.
                        And why use printf in C++ at all?

                        DuBuD Offline
                        DuBuD Offline
                        DuBu
                        wrote on last edited by DuBu
                        #17

                        @jsulm Yes, to use int64_t is perfectly valid. So Qt should use it in their own classes.
                        Why use printf in C++? Cause it sits deep down in a C library we want to use in C++ as well. And also: why not?

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved