恒定内存发生变化,它应该给出错误,但它工作正常。这段代码有什么问题?

问题描述 投票:0回答:1
#include<stdio.h>
int main()
{
        int const x = 5;
        int *y;
        printf("x = %d \n",x);
        y = &x;
        *y = 10;
        printf("x = %d , y = %d \n",x,*y);
        return(0);
}

即使数据设置为常量,常量值也会发生变化。

我已经执行了这段代码,我认为这应该会出错。因为我正在尝试更改 const 数据。

c constants
1个回答
0
投票

我已经执行了这段代码,我认为这应该会给出错误

它应该给出诊断消息。 C 标准没有提及警告和错误。 C 编译器发现错误时必须做什么?

它确实在我尝试过的每个编译器上给出了一个。以海湾合作委员会为例:

警告:赋值从指针目标类型中丢弃“const”限定符[-Wdiscarded-qualifiers]

这种情况下的警告并不意味着“这是一个不重要的细节,你可以在未雨绸缪时修复”,而是“这里的错误代码甚至不是有效的 C,但我决定无论如何生成一个可能有错误的可执行文件”。

质量实现 当提供无效的 C 语言时,C 编译器根本不会生成可执行文件,但大多数主流编译器并不关心质量。因此,如果您希望每次编写无效 C 时出现错误而不是警告,请查看为学习 C 的初学者推荐哪些编译器选项?

© www.soinside.com 2019 - 2024. All rights reserved.