标识符“__transaction_atomic”未定义C/C++(20)

yuvru6vn  于 2023-03-11  发布在  C/C++
关注(0)|答案(1)|浏览(259)

我使用的是vscode 1.75.1,安装了C/C++ microsoft扩展,并使用gcc版本11.3.0在Lubuntu 22.04 LTS上进行开发。当尝试将software transactional memory (STM) in gcc__transaction_atomic表示的事务表达式一起使用时,vscode无法识别该表达式,并出现以下问题(这些不是编译错误,只是vscode检测到的问题):
标识符“__transaction_atomic”未定义C/C++(20)
预期为a ';C/ C++ (65)
vscode建议通过编辑C/C++属性文件的包含路径来修复此问题;然而,由于STM表达式是gcc编译器的一个特性,我不确定这会有什么帮助。2有什么建议吗?
下面是一些导致问题的简单代码(因为这是智能感知的问题,而不是程序逻辑的问题)。注意,代码编译和运行没有问题。

// gcc -fgnu-tm example_stm.c 
int main() {
    __transaction_atomic { /*an atomic operation*/ }
    return 0;
}

我的项目.vscode文件中包含以下配置信息:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_POSIX_C_SOURCE=199309L"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu99",
            "cppStandard": "c++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

注意,我已经尝试将c_cpp_properties.json文件中的C标准更改为C11和其他版本;然而,这并没有解决问题。

shyt4zoc

shyt4zoc1#

fgnu-tm标志只在支持事务内存的系统上可用,如某些Intel处理器。您应该检查您的系统是否支持该标志进行编译。
对于VSCode,虽然我无法证明,但我猜测IDE无法识别__transaction_atomic,因为它运行在不支持该编译器标志的系统上。您可能需要切换系统或禁用该特定错误。

相关问题