我使用的是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和其他版本;然而,这并没有解决问题。
1条答案
按热度按时间shyt4zoc1#
fgnu-tm标志只在支持事务内存的系统上可用,如某些Intel处理器。您应该检查您的系统是否支持该标志进行编译。
对于VSCode,虽然我无法证明,但我猜测IDE无法识别
__transaction_atomic
,因为它运行在不支持该编译器标志的系统上。您可能需要切换系统或禁用该特定错误。