首页 > 解决方案 > 编译器抱怨 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;
}

我正在使用 x64 msvc v19(WINE) 编译器,在Godbolt上没有任何标志

标签: c++ccompiler-errors

解决方案


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

推荐阅读