main在C语言中,像stm32这样的嵌入式系统最基本的函数是:
int main(void) {
int i = 0;
while(1) {
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于i是一个整数,它不会溢出并因此在某些时候产生问题吗?
while(1) i++另外,在等待特定中断时使用相同的策略(使用 )循环是否安全?
编辑:感谢您的所有回答。我很遗憾不知道溢出处理程序与 C 和 C++ 有很大不同。现在我明白了 !
我在 C 中处理整数,试图更多地探索溢出发生的时间和方式。
我注意到当我添加两个正数时,它们的总和溢出,我总是得到一个负数。
另一方面,如果我添加两个负数,它们的总和溢出,我总是得到一个正数(包括 0)。
我做了一些实验,但我想知道这是否适用于每种情况。
我发现在没有优化和-Os优化的情况下编译的以下代码的汇编程序结果之间的差异非常奇怪.
#include <stdio.h>
int main(){
int i;
for(i=3;i>2;i++);
printf("%d\n",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有优化代码结果:
000000000040052d <main>:
40052d: 55 push %rbp
40052e: 48 89 e5 mov %rsp,%rbp
400531: 48 83 ec 10 sub $0x10,%rsp
400535: c7 45 fc 03 00 00 00 movl $0x3,-0x4(%rbp)
40053c: c7 45 fc 03 00 00 00 movl $0x3,-0x4(%rbp)
400543: eb 04 jmp 400549 <main+0x1c>
400545: 83 45 fc 01 addl $0x1,-0x4(%rbp)
400549: 83 7d fc 02 cmpl $0x2,-0x4(%rbp)
40054d: 7f f6 jg 400545 <main+0x18> …Run Code Online (Sandbox Code Playgroud) 我看过一些short在C#中使用的答案,但我不确定他们是否真的回答了我的问题.是short在C++中另一个名字int?我知道你可以制作short int,这似乎能够处理很多价值但我还在开始,所以很明显,如果这short不是很多价值观.但是在这里的代码片段中:
short lives,aliensKilled;
Run Code Online (Sandbox Code Playgroud)
它不使用int short,它只是使用short.所以我想我的问题是,如果我不低于-32,768或超过32,767 ,我可以用它short作为替代品int吗?
另外,只要更换适当的东西,它是否可以替换short为int,并且它不会真正搞乱任何东西?(顺便说一下lives,aliensKilled它们都是变量名.)
编辑:原始的单词选择令人困惑.术语"象征性"比原始术语("神秘")要好得多.
在关于我以前的C++问题的讨论中,我被告知指针是
这并没有健全的权利!如果没有任何符号,并且指针是其表示,那么我可以执行以下操作.我可以吗?
#include <stdio.h>
#include <string.h>
int main() {
int a[1] = { 0 }, *pa1 = &a[0] + 1, b = 1, *pb = &b;
if (memcmp (&pa1, &pb, sizeof pa1) == 0) {
printf ("pa1 == pb\n");
*pa1 = 2;
}
else {
printf ("pa1 != pb\n");
pa1 = &a[0]; // ensure well defined behaviour in printf
}
printf ("b = %d *pa1 = %d\n", …Run Code Online (Sandbox Code Playgroud)