RDTSC on VisualStudio 2010 Express - C++ does not support default-int

12,229

Solution 1

You have to #include <stdint.h>. Or (better) #include <cstdint>.

Visual Studio started shipping those headers with the 2010 version.

Solution 2

To have this working you have to include cstdint :

#include <cstdint> // Or <stdint.h>

cstdint is the C++-style version of the C-style header stdint.h. Then it is better in your case to use the first one even if both are working in C++.

It is said here that those headers are shipped with visual studio since the 2010 version.

Solution 3

You have not included stdint.h/cstdint at the top apparently. This will work:

#include <iostream>
#include <windows.h>
#include <intrin.h>
#include <stdint.h>
using namespace std;

uint64_t rdtsc()
{
    return __rdtsc();
}

int main()
{
    cout << rdtsc() << "\n";
    cin.get();
    return 0;
}
Share:
12,229
Brian Brown
Author by

Brian Brown

B'ham fellow

Updated on June 05, 2022

Comments

  • Brian Brown
    Brian Brown almost 2 years

    I tried to test rdtsc on VisualStudio 2010. Heres my code:

    #include <iostream>
    #include <windows.h>
    #include <intrin.h>
    using namespace std;
    
    uint64_t rdtsc()
    {
        return __rdtsc();
    }
    
    int main()
    {
        cout << rdtsc() << "\n";
        cin.get();
        return 0;
    }
    

    But I got errors:

    ------ Build started: Project: test_rdtsc, Configuration: Debug Win32 ------
      main.cpp
    c:\documents and settings\student\desktop\test_rdtsc\test_rdtsc\main.cpp(12): error C2146: syntax error : missing ';' before identifier 'rdtsc'
    c:\documents and settings\student\desktop\test_rdtsc\test_rdtsc\main.cpp(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\documents and settings\student\desktop\test_rdtsc\test_rdtsc\main.cpp(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\documents and settings\student\desktop\test_rdtsc\test_rdtsc\main.cpp(14): warning C4244: 'return' : conversion from 'DWORD64' to 'int', possible loss of data
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    

    What should I do? I dont want to change uint64_t into DWORD64. Why VisualStudio doesnt understand uint64_t?