告诉编译器只包含一次文件有什么意义?默认情况下没有意义吗?是否有任何理由多次包含一个文件?为什么不只是假设呢?是否与特定硬件有关? 最佳答案 这里有多个相关问题:为什么#pragmaonce不自动执行?因为在某些情况下,您希望多次包含文件。为什么要多次包含一个文件?其他答案(Boost.Preprocessor,X-Macros,包括数据文件)中给出了几个原因。我想添加一个“避免代码重复”的特定示例:OpenFOAM鼓励一种风格,其中#include在函数中使用点点滴滴是一个常见概念。参见示例this讨论。好的,但为什么它不是默认的
考虑以下语句:*((char*)NULL)=0;//undefinedbehavior它显然调用了未定义的行为。给定程序中存在这样的语句是否意味着整个程序是未定义的,或者只有在控制流到达该语句时行为才变得未定义?如果用户从不输入数字3,下面的程序会被很好地定义吗?while(true){intnum=ReadNumberFromConsole();if(num==3)*((char*)NULL)=0;//undefinedbehavior}或者无论用户输入什么,它都是完全未定义的行为?另外,编译器可以假设未定义的行为永远不会在运行时执行吗?这将允许及时向后推理:intnum=ReadN
考虑以下语句:*((char*)NULL)=0;//undefinedbehavior它显然调用了未定义的行为。给定程序中存在这样的语句是否意味着整个程序是未定义的,或者只有在控制流到达该语句时行为才变得未定义?如果用户从不输入数字3,下面的程序会被很好地定义吗?while(true){intnum=ReadNumberFromConsole();if(num==3)*((char*)NULL)=0;//undefinedbehavior}或者无论用户输入什么,它都是完全未定义的行为?另外,编译器可以假设未定义的行为永远不会在运行时执行吗?这将允许及时向后推理:intnum=ReadN