gpt4 book ai didi

c++ - 为什么系统在没有警告的情况下接受 long int 作为 int 参数传递?

转载 作者:行者123 更新时间:2023-11-30 03:37:37 26 4
gpt4 key购买 nike

快速简单的问题(几乎是出于好奇):

例如,如果我在 C++ 程序中声明一个 long int,然后在一个采用 int 的函数中调用它,我知道它可以正常工作,除非我给它一个 4 字节大小的值,这将导致打印内容不好。

然而,令我惊讶的是,它没有以任何方式对此发出警告。如果我声明一个 4 字节的 long int,系统知道它有 32 位来存储该值。但是,如果我将相同的 long int 传递给它只调用 int(2 个字节)的函数,我假设我在中使用 16 位此值不应使用的内存。

我说的对吗?或者它会只使用作为参数收到的 long int 的最低 16 位吗?这里的流程是什么?

代码示例:

#include <stdio.h>

void test(int x) { // My question is why it accepts this?
printf("%d", x);
}


int main() {
long int y=4294967200; // 32 bits

test(y);
return 0;
}

最佳答案

很可能是因为您没有在编译器中启用该功能。例如,使用启用了转换警告的 GCC 会给出:

warning: conversion to ‘int’ from ‘long int’ may alter its value

如果问题是为什么默认情况下不启用此类警告,那是因为许多非常常见的代码模式会由于自动升级而产生大量虚假警告。例如,unsigned char p[10]; ... p[1] ^= 1;.

关于c++ - 为什么系统在没有警告的情况下接受 long int 作为 int 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com