C语言 分配给整数变量的变量地址,方式?

x3naxklr  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(124)

一个变量的地址被分配给整型变量,而没有错误(只是一个警告)在C Language.how这是可能的吗??任何人都可以解释吗?代码:

int main()
{
    int a=9;
    int *x=&a;
    int y=&a;
    printf("%d\n",y);
    printf("%p",x);
    return 0;
}

代码输出:

test.c: In function 'main':
test.c:7:11: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
       int y=&a;
           ^
6422292
0061FF14

我期待在整数变量中存储地址时出错。

kkbh8khc

kkbh8khc1#

这是怎么可能的??...我期待在整数变量中存储地址时出现错误。
int y=&a;违反了C 2018 www.example.com 1中简单赋值的约束6.5.16.1,该约束列出了右操作数允许的几种类型组合,其中左操作数具有_Bool以外的算术类型的唯一组合,如int所做的,表示右操作数也必须具有算术类型,而&a没有:
...左操作数具有原子、限定或非限定算术类型,右操作数具有算术类型...
C 2018 5.1.13 1说明了符合规范的C实现必须为此做些什么:
如果预处理翻译单元或翻译单元违反任何语法规则或约束,则一致性实现应至少生成一条诊断消息(以实现定义的方式标识),......
警告是一个诊断信息。因此它满足C标准的要求。这回答了你的问题“这怎么可能?”
在编译器中启用警告并将警告升级为错误。对于Clang,从-Wmost -Werror开始。对于GCC,从-Wall -Werror开始。对于MSVC,从/W3 /WX开始。

brccelvz

brccelvz2#

  • 这怎么可能呢?

因为编译器除了给予你一个某种形式的消息外,没有义务做任何其他的事情。

  • 无错误(仅警告)

没有所谓的“只是一个警告”。一个警告通常意味着:“这里有一个严重的错误,你必须修复它,使你的程序按预期运行”。它通常不意味着:“这里有一些小的外观问题,你可以忽略”。

相关问题