有一天,我正在将一个用C99标准编写的程序转换成C11。基本上动机是使用MSVC的代码,但它是用Linux编写的,并且大部分都是使用默认的GCC行为编译的。在代码转换过程中,我发现你不能在任何语句后去除函数的变量,也就是说你必须在函数的顶部声明它们。使用C99和C11时的效率问题。
但我的问题是,它不会违反有效的编程规则,变量应该在其使用附近进行声明,以使其最大化缓存命中?例如,在一个200 LOC的大函数中,我想在函数的最后使用一些大的静态查找数组。在使用导致更多缓存命中之前不会声明并初始化它?还是我简单地缺少C11 C语言标准的一些基本点?
C2011(我恨名字C11)允许与代码混合的声明。 *我明白微软的编译器只能理解C89,可能只有一些扩展。* – pmg
这与C89有关,在这里你不能在同一个块中的语句之后放置声明。 C99和C11中不再存在此要求。 – ouah
MSVC不支持C11。也许你的意思是C89? – ecatmur