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

旧MS-DOS时代C代码在void函数返回struct时GCC编译失败问题

问题原因

你代码中vector& c的写法是C的引用语法,不属于标准C的语法范畴。早年DOS时期的C编译器语法校验宽松,很多默认支持C扩展语法,因此能正常编译;但GCC按C标准编译时不支持该语法,直接报错。


方案1:零改动直接编译

如果不需要严格符合纯C标准,直接用g++替换gcc编译你的现有代码即可,C++完全兼容当前写法,调用时仍然可以用.x的点语法访问结构体成员,不需要做任何修改。


方案2:纯C标准兼容实现(无需指针)

如果需要代码兼容所有C标准环境,可以直接修改函数为返回结构体实例,完全不需要引入指针,也不用调整任何成员访问语句的写法:

typedef struct { int x,y,z; } vector;

vector vect_add(vector a, vector b)
{
    vector res;
    res.x = a.x + b.x;
    res.y = a.y + b.y;
    res.z = a.z + b.z;
    return res;
}

调用方式完全符合你的需求:

vector a = {1,2,3}, b = {4,5,6};
vector c = vect_add(a, b);
// 直接用点语法访问,和原有使用习惯完全一致
printf("%d %d %d\n", c.x, c.y, c.z);

该写法符合C89及以上所有C标准,全版本GCC都可正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:24:05