c++ - 编译器抱怨 volatile 关键字
问题描述
我试图从这个问题编译以下代码,但编译失败:错误 C2059:语法错误:'volatile'
#include<stdint.h>
#include<stdio.h>
static inline uint64_t rdtscp( uint32_t & aux )
{
uint64_t rax,rdx;
asm volatile ( "rdtscp\n" : "=a" (rax), "=d" (rdx), "=c" (aux) : : );
return (rdx << 32) + rax;
}
解决方案
asm volatile
是一个 GNU 扩展。限定符在此处记录。
对于 MSVC,请改用__rdtscp
内部函数。
另外,请注意,您可以在所有主要编译器中使用内在函数,例如:
#include <iostream>
#include <cstdint>
#ifdef _WIN32
# include <intrin.h>
#else
# include <x86intrin.h>
#endif
int main()
{
uint64_t i;
uint32_t ui;
i = __rdtscp(&ui);
std::cout
<< "Ticks: " << i << '\n'
<< "TSC_AUX: " << ui << '\n'
;
return 0;
}
推荐阅读
- html - 是否可以使用 React 在函数中呈现 HTML?
- java - 表单建模器未在选择中显示枚举值
- sql - 在某些条件和 ROW_NUMBER 函数中使用合并
- javascript - 有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?
- python-3.x - 不明白为什么服务器不会响应客户端(即使在打开防火墙后 | Python | 服务器
- sql - 选择行,对于 A 列中的相同值,B 列在所有行中都具有特定值
- c - 为什么在 C 中使用链表前端元素错误获取优先级队列?
- python-3.x - `on_typing` 事件在 self bot discord.py 上不起作用
- r - 无法在闪亮应用程序的 lapply 函数中使用应用函数
- .net - 私有 nuget 源 github 返回 401 并具有正确的凭据