LINUX.ORG.RU

Меняю const. Стреляю себе в ногу и получается

 ,


0

1
>>> cat weirdConst.c
#include <stdio.h>

static const unsigned a0 = 0;
int main() {
	*((int *)&a0) = 102;
	
	printf("%u\n", a0);
	
	return 0;
}
>>> gcc -Wall -Wextra weirdConst.c
>>> gcc --version
gcc (GCC) 6.3.0  

0 ошибок 0 ворнингов. Iar тоже пофиг.

При исполнении правда Segmentation fault

Как бы ок. Но меня возмущает что гцц игнорирует подобное.

На мк вообще нету const секции и там константа действительно изменяется.

Это я сравнивал enum vs static const. enum (за исключением того что он всегда int типа) точно такое не позволит. И памяти тоже гарантированно не занимает (важно для маленького размера флеша/озу мк)

#define можете даже не упоминать. Не знаю почему сишники так любят численные константы делать через #define. Да еще и без префиксов библиотеки. А потом эти дефайны везде лезут в неожиданных местах. Если портирую библиотеку и вижу кучу #define то сразу sed ом превращаю в enum. Ибо нафик. Сейчас есть острое желание сделать static const uint8_t UINT8_MAX_imp = UINT8_MAX; #undef UINT8_MAX; static const UINT8_MAX = UINT8_MAX_imp; и так для всех численных макросов стандартной библиотеки.

★★★★
Ответ на: комментарий от anonymous

Я немного перефразирую иисуса и скажу что мир унаследут не кроткие а придурки. Поэтому не советую тебе с нами ссорится. И да: WFJKLSD. Это уместнее чем

ТС - ССЗБ

Stierlitz_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.