相关疑难解决方法(0)

131
推荐指数
4
解决办法
12万
查看次数

(为什么)使用未初始化的变量未定义行为?

如果我有:

unsigned int x;
x -= x;
Run Code Online (Sandbox Code Playgroud)

很明显,x 应该这样表达后是零,但到处看,他们说的行为,这种代码是不确定的,而不是仅仅值x(直到减法之前).

两个问题:

  • 这段代码的行为确实未定义吗?
    (例如,代码在兼容系统上崩溃[或更糟]?)

  • 如果是这样,为什么 C表示行为是未定义的,当非常清楚x这里应该为零时?

    即不在此定义行为给出的优势是什么?

很明显,编译器可以简单地使用它在变量中认为"方便"的任何垃圾值,并且它可以按预期工作......这种方法有什么问题?

c initialization undefined-behavior

77
推荐指数
6
解决办法
1万
查看次数

C:为什么未分配的指针指向不可预测的内存而NOT指向NULL?

很久以前我曾经在C学校上学.我记得我真的讨厌C的东西:未分配的指针不指向NULL.

我问过包括教师在内的很多人为什么他们会将未分配指针默认行为指向NULL,因为它似乎更难以预测.

答案应该是表现,但我从未买过.我认为,如果C默认为NULL,那么编程历史中的许多错误都可以避免.

这里有一些C代码指出(双关语)我在说什么:

#include <stdio.h>

void main() {

  int * randomA;
  int * randomB;
  int * nullA = NULL;
  int * nullB = NULL;


  printf("randomA: %p, randomB: %p, nullA: %p, nullB: %p\n\n", 
     randomA, randomB, nullA, nullB);
}
Run Code Online (Sandbox Code Playgroud)

编译警告(很高兴看到C编译器比我在学校时更好)和输出:

randomA:0xb779eff4,randomB:0x804844b,nullA:(nil),nullB:(nil)

c pointers

46
推荐指数
5
解决办法
5430
查看次数

如果不为每个分配 1,“ int x,y,z = 1 ”在做什么?

我是 C/C++ 新手,我注意到我的程序计算了错误的值。我发现问题在于我对 C/C++ 中变量声明的工作方式的理解。 x,y,z = 1,2,3在 Python 中工作正常,而 asx,y,z = 1则不然。 int x,y,z = 1,2,3不能在 C/C++ 中工作,但int x,y,z = 1可以,因为cout << x;输出 16,我预计它是 1。

#include <iostream>
using namespace std;

int main() {

    int x, y, z = 1;
    cout << x;
    
    return 0;

}

// The output is 16
Run Code Online (Sandbox Code Playgroud)

int x,y,z = 1如果不为每个分配 1,则操作在做什么?

c++ variable-assignment

3
推荐指数
1
解决办法
97
查看次数