You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

G++编译含__attribute__关键字的C代码失败 GCC可正常编译

错误原因

这个编译错误和__attribute__关键字无关,根本原因是代码使用了C语言的K&R旧式函数定义语法:

  • gcc是C语言编译器,默认兼容K&R语法,所以可以正常编译
  • g是C编译器,C++标准从最初版本就不支持K&R风格的函数声明/定义,解析语法时会直接报错

你代码里的这段就是典型K&R风格定义:参数名写在函数括号里,参数类型单独声明在括号和函数体之间:

static __inline int student_information(stu) struct student *stu;
{
    return 0;
}

g++解析这段代码时,不会识别括号外的参数类型声明,会误把student_information(stu)判定为inline变量声明,后续的类型声明、函数体都会被判定为语法错误,也就是你看到的那一串报错。

修复方案

把K&R风格的函数定义改成C、C++通用的标准函数原型形式即可,不需要改动__attribute__相关代码,修改后的对应代码段为:

static __inline int student_information (struct student *stu) __attribute__((__unused__));
static __inline int student_information (struct student *stu)
{
    return 0;
}

修改完成后执行g++ test.c -o test即可正常编译通过。

如果不想修改原有C代码,也可以在编译时加-x c参数,强制g++按照C语言语法规则解析文件,对应命令为:
g++ -x c test.c -o test
这种方式不需要改代码,但长期来看还是推荐把函数定义改成标准原型形式,跨编译器兼容性更好。


内容的提问来源于stack exchange,提问作者qwe123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:03:21