确定空无限循环的编译器行为的最佳方法是什么?
What is my best approach to determining compiler behaviour for empty infinite loops?
在C 11中,具有空体的无限环具有未定义的行为。我不知道它是否也在C中,所以假设我在C 11中编写嵌入式固件(我知道,不太可能,但请忍受)。
如果我的 main
只是一个:
while (true) {}
和设备的其余功能是通过中断处理的,我可以采用哪些方法来发现我的实现是否使该循环安全有意义?记住,根据标准,在这种情况下可以免费执行实施方式,包括完全删除循环。
假设实现文档中没有清楚地说明它,因为我从未见过。
还是这是一个失去的原因,我应该入侵解决方案?
volatile unsigned int dummy = 0;
while (true) {
// Make the loop well-defined...
dummy++;
// ...with a trivial operation that'll hardly ever even happen
sleep(42*86400);
}
我认识到,历史上嵌入的开发人员对这种事情并不多,而是假设编译器的"脚踏实地","常识"方法。但是我更喜欢用严格地编码标准,以避免尽可能多的惊喜。
如何查看编译器的汇编语言输出?
g++ -std=c++0x x.cpp -S
输出:
.L2:
jmp .L2
和
clang++-3.5 -S -std=c++11 x.cpp
输出:
.LBB0_1: # =>This Inner Loop Header: Depth=1
jmp .LBB0_1
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?