Я наткнулся на небольшую проблему, пытаясь сделать const-правильный код.
Мне бы хотелось написать функцию, которая берет указатель на const struct, чтобы передать компилятору "скажите, пожалуйста, изменяю ли я структуру, потому что я действительно не хочу".
Мне вдруг пришло в голову, что компилятор позволит мне это сделать:
struct A
{
char *ptrChar;
};
void f(const struct A *ptrA)
{
ptrA->ptrChar[0] = 'A'; // NOT DESIRED!!
}
Это понятно, потому что то, что на самом деле является const, - это сам указатель, но не тот тип, на который он указывает. Я хотел бы, чтобы компилятор сказал мне, что я делаю то, что я не хочу делать, хотя это возможно.
Я использовал gcc как мой компилятор. Хотя я знаю, что вышеприведенный код должен быть законным, я все равно проверял, будет ли оно выдавать предупреждение в любом случае, но ничего не пришло. Моя командная строка:
gcc -std=c99 -Wall -Wextra -pedantic test.c
Можно ли обойти эту проблему?