Форум программистов, компьютерный форум, киберфорум
Наши страницы

Оператор -> и спецификатор класса памяти extern - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обобщенный указатель типа void http://www.cyberforum.ru/cpp-beginners/thread424242.html
В приложенной картинке рассказывается о динамическом распределении памяти в С. Сказано, что функция malloc() возвращает указатель типа void. Что это вообще значит?! Функции void не могут возвращать...
C++ Книга по ООП Си++ Добрый вечер , мне дали задание ,написать двусвязный список на С++ с помощью ООП... Подскажите , пожалуйста , книгу или статью, по которой можно это выучить... http://www.cyberforum.ru/cpp-beginners/thread424233.html
Пример использования спецификатора volatile C++
В приложенной картинке (из книги Г.С. Шилдта по C++) есть пример использования спецификатора volatile. Есть три вопроса. Первый: что вообще написано в зеленой :) строке? Переменная будет...
C++ Циклические алгоритмы
Как реализовать данную функцию для каждого x, изменяющегося от a до b с шагом h. Значения a, b, h и n вводятся с клавиатуры. Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение...
C++ Передача массива из главной функции в неглавную по указателю. http://www.cyberforum.ru/cpp-beginners/thread424215.html
Доброго времени суток! Задача: В функции main() сформировать матрицу M со случайными числами. Её передать по указателю в не главную функцию, в которой из матрицы изымается главная диагональ....
C++ Покрашенный граф Привет для вот такого условия Дан ориентированный граф, у которого каждая дуга покрашена в один из трех цветов. Требуется найти длину кратчайшего пути из 1й вершины в N-ую, если в пути не могут... подробнее

Показать сообщение отдельно
LosAngeles
Заблокирован
09.01.2012, 19:07
Цитата Сообщение от alex_x_x Посмотреть сообщение
может схавать - зависит от компилятора, но поведение неопределенное
от компилятора это не зависит, компилятор, встретив переменную допустим extern int x, поместит её в таблицу символов, если пройтись по такому объектному файлу objdump, то он покажет смещение *UND* для такой переменной и в коде везде будет обращаться с ней как с обычным интом, просто пока неизвестно его смещение. Во втором модуле можно определить этот самый x причём чем угодно, необязательно интом, можно структурой или указателем на функцию, линкеру это по барабану, ему нужно только смещение и имя идентификатора, во внутренние дела модуля он не лезет. Главное чтобы все были определены по разу, он просто слепит все модули подставив соответсвующие адреса. Он не делает проверку типов. Так что extern volatileint по всей видимости означает что внутри этого модуля с этим импортированным символом будут обращаться как с int volatile, но чем он является на самом деле неизвестно. Конечно это всё зависит от ABI, может на какой нибудь платформе с каким то экзотическим форматом файлов и делается проверка типов, но я с такими не сталкивался. Удобно кстати задефайнить extern в PUBLIC, а static в PRIVATE, тогда становится нагляднее что экспортируется


в системном программировании кстати применяется иногда такой трюк с extern. Иногда нужно например убедиться чтобы размер загрузочного образа был в рамках приличного на этапе компиляции, тогда пользуются тем фактом, что нельзя создать массив отрицательного размера
C
1
extern int dummy[sizeof(image) > LIMIT ? 100 : -100];
а потом определяют его где-нибудь dummy как short int
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru