相关疑难解决方法(0)


508
推荐指数
8
解决办法
5万
查看次数

C语言中setjmp和longjmp的实际用法

任何人都可以解释我究竟在哪里setjmp(),longjmp()功能可以在嵌入式编程中实际使用?我知道这些是用于错误处理的.但我想知道一些用例.

c

84
推荐指数
7
解决办法
4万
查看次数

除以零:未定义的行为或实现在C和/或C++中定义?

关于除零,标准说:

C99 6.5.5p5 - /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数.在这两个操作中,如果第二个操作数的值为零,则行为未定义.

C++ 03 5.6.4 - 二进制/运算符产生商,二进制%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.

如果我们将上述段落视为面值,答案显然是两种语言的未定义行为.但是,如果我们进一步了解C99标准,我们会看到以下段落似乎是矛盾的(1):

C99 7.12p4 - 宏INFINITY扩展为float类型的常量表达式,表示正无穷大或无符号无穷大(如果可用);

标准是否有某种黄金法则,其中未定义的行为不能被(可能)矛盾的陈述所取代?除此之外,我认为如果你的实现定义了INFINITY宏,那么将零除法定义为这样是不合理的.但是,如果您的实现没有定义这样的宏,则行为是Undefined.

我很好奇这两种语言在这个问题上的共识是什么(如果有的话).如果我们谈论整数除法int i = 1 / 0与浮点除法,答案会改变float i = 1.0 / 0.0吗?

注意(1) C++ 03标准讨论了<cmath>包含INFINITY宏的库.

c c++ divide-by-zero undefined-behavior

24
推荐指数
3
解决办法
2万
查看次数

为什么解除引用空指针是未定义的行为?

根据ISO C++,取消引用空指针是未定义的行为.我的好奇心是,为什么?为什么标准决定声明它未定义的行为?这个决定背后的理由是什么?编译器依赖?似乎没有,因为根据C99标准,据我所知,它是明确定义的.机器依赖?有任何想法吗?

c++ pointers undefined-behavior

22
推荐指数
5
解决办法
9066
查看次数

段错误返回的进程有什么错误代码?

段错误返回的进程有什么错误代码?从我的实验来看,它似乎是"139",但我想找到为什么会这样,它是多么标准.

c unix linux runtime-error segmentation-fault

13
推荐指数
2
解决办法
9529
查看次数