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
Forum Updated to NodeBB v4.3 + New Features

Warning when using qint64 with PRIi64 on 64 bit linux

Scheduled Pinned Locked Moved Unsolved General and Desktop
17 Posts 3 Posters 4.8k 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.
  • 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 Offline
                  jsulmJ Offline
                  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 Offline
                      jsulmJ Offline
                      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