我尝试使用属性const和pure尝试使GCC强制执行某个函数不允许访问任何全局变量,但这可以正常编译:
#include <stdlib.h>
#include <stdio.h>
int data;
__attribute__((const))
int test_func(int val){
data = val;
return data;
}
int main(){
scanf("%d", &data);
printf("test: %d\n", test_func(data));
return 0;
}
这不应该编译。
是否有一种方法可以执行以下规则:该函数本身或其调用的任何其他函数都不能访问除其参数之外的任何变量?
答案 0 :(得分:2)
GCC manual说__attribute__((const))
被程序员用来指示函数的行为,以便可以更好地对其进行优化。
调用返回值不受程序可观察状态更改影响且对这种状态没有可观察影响(而不返回值)的函数的调用可能会有助于进行优化,例如消除公共子表达式。使用const属性声明此类函数可以使GCC避免在重复调用具有相同参数值的函数时发出某些调用。
在文档中,在某些情况下会引发编译错误,而错误的行为(访问函数内的全局变量)不是其中一种。因此,您有责任不要将此属性用于使用全局函数的函数。