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

为何这段C/C++代码在在线编译器可编译,Visual Studio却报E0144错误?

问题原因解析

先明确你的代码和报错信息:

int main()
{
    char* const fooCode = "function foo(x, y) { return x + y; }";
}

Error (active) E0144 a value of type "const char *" cannot be used to initialize an entity of type "char *const"

出现这种编译结果差异的核心原因有两点:

1. C与C++的标准规则差异

  • 在C标准中,允许字符串字面量(类型为const char*)隐式转换为char*,虽然这种行为不推荐(修改字符串字面量属于未定义行为),但属于合法的C代码范畴。
  • 而C从C11标准开始,彻底禁止了这种隐式转换。因为char* const指向的是可修改的字符序列,而字符串字面量本质是只读的,这种赋值会破坏类型安全,所以严格遵循C++标准的编译器会直接报错。

2. 编译器默认编译选项的差异

  • Visual Studio对C代码默认启用严格的标准检查,会直接拦截这种不符合C标准的转换操作。
  • 你提到的在线编译器能通过编译,大概率是因为它默认使用了宽松的编译选项(比如兼容旧版C标准,或者开启了-fpermissive这类允许非标准转换的开关),本质是编译器放宽了检查,而非这段代码符合现代C标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:42:05