Я попытался использовать атрибут 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;
}
Это не должно компилироваться.
Есть ли способ применить правило, согласно которому ни сама функция, ни любые другие вызываемые ею функции не могут получить доступ к каким-либо переменным, кроме их аргументов?