История изменений
Исправление Vic, (текущая версия) :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.
Целью такого управления, как раз являются подсказки компилятору, чтобы он проверял размеры и возможные проблемы с вычислениями указателей еще на этапе компиляции.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует.
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.
Исправление Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.
Универсального (академического) указателя всё-равно не существует.
А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели (memory model). А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.
Исходная версия Vic, :
Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход значений через структуры адресов.
Из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства. А если он не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.
Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.
PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.