当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?
restrict是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.
该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?
编译器如何控制内存中变量的保护?是否有与内存中的私有变量相关联的标记位?它是如何工作的?
我已经看到几个断言,C89和C++ 03定义了严格的别名规则.但是,我无法在标准中找到该特定位.我的理解是在C99中添加了严格的别名规则.
我有一系列复杂的函数执行非常相似的任务,除了函数中间的一个操作符.我的代码的简化版本可能是这样的:
#include <assert.h>
static void memopXor(char * buffer1, char * buffer2, char * res, unsigned n){
for (unsigned x = 0 ; x < n ; x++){
res[x] = buffer1[x] ^ buffer2[x];
}
};
static void memopPlus(char * buffer1, char * buffer2, char * res, unsigned n){
for (unsigned x = 0 ; x < n ; x++){
res[x] = buffer1[x] + buffer2[x];
}
};
static void memopMul(char * buffer1, char * buffer2, char * res, unsigned n){
for (unsigned …Run Code Online (Sandbox Code Playgroud)