2

我尝试rdtsc在 VisualStudio 2010 上进行测试。这是我的代码:

#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;
}

但我得到了错误:

------ 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 ==========

我应该怎么办?我不想uint64_t变成DWORD64. 为什么 VisualStudio 不明白uint64_t

4

3 回答 3

3

你必须#include <stdint.h>。或(更好)#include <cstdint>

Visual Studio 开始在 2010 版本中提供这些标头。

于 2013-08-24T11:20:45.110 回答
2

要使其正常工作,您必须包括cstdint

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

cstdint是 C-style header 的 C++-style 版本stdint.h。那么在你的情况下最好使用第一个,即使两者都在 C++ 中工作。

据说这些标头自 2010 版本以来随 Visual Studio 一起提供。

于 2013-08-24T11:38:16.590 回答
1

您显然没有在顶部包含 stdint.h/cstdint 。这将起作用:

#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;
}
于 2013-08-24T11:19:56.900 回答