Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2016, 00:08   #1
robix
Пользователь
 
Регистрация: 16.07.2015
Сообщений: 31
По умолчанию Последовательность выполнения кода. Внешняя структура.

Здравствуйте. Имеется
header.h
code1.cpp
code2.cpp


И code1.cpp и code2.cpp имеют
Код:
#include "header.h"
В header.h объявляется структура
Код:
struct CurrentPosition
{
 //...
};
Затем в code1.cpp до объявления всех его функций инструкция:
Код:
extern CurrentPosition* Position;
А в code2.cpp также до объявления всех его функций есть инструкция:
Код:
CurrentPosition* Position= new CurrentPosition;
Когда программа запускается, то переменная Position еще не задействована в функциях

Вопросы

1. Какой из исполняемых файлов code1.cpp или code2.cpp выполнится первым?

2. При выполнении CurrentPosition* Position= new CurrentPosition переменная Position уже будет знать, что она extern ?

3. Если переменная Position используется в постоянно выполняемых с определенного момента callback-функциях в обеих cpp -файлах, то не может ли возникнуть ошибка когда обе функции одновременно попытаются получить к ней доступ на запись. Если может, то как этого избежать? Просто я использую внешнюю библиотеку, которая предполагает использование ее callback-функций. Они нужны для разных, но параллельных взаимосвязанных задач. И нет понимания как такое работает с моей extern структурой Position

Последний раз редактировалось robix; 23.01.2016 в 00:15.
robix вне форума Ответить с цитированием
Старый 23.01.2016, 00:29   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

однако.

исполняются ехе файлы, а срр - просто текстовые файлы, которые читаются компилятором.
f.hump вне форума Ответить с цитированием
Старый 23.01.2016, 01:05   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Исходим из того, что header.h - заголовочный, а code1.cpp и code2.cpp - файлы реализации. В заголовочном файле прописываются классы и прототипы функций, которые в эти классы включены. Если #include "header.h" имеется в двух cpp файлах, значит оба эти файла принадлежат к одному и тому-же классу или к двум классам, включенным в заголовочный.
Цитата:
Какой из исполняемых файлов code1.cpp или code2.cpp выполнится первым?
Первой выполнится та функция, которая первой будет прописана в блоке main, вне зависимости от того, в каком из двух cpp файлах она прописана т.к. для её выполнения, нужно активировать сам класс, в котором эта функция находится.
Немного сумбурно описал, но думаю - понятно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.01.2016, 01:08   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
1. Какой из исполняемых файлов code1.cpp или code2.cpp выполнится первым?
Если имеется ввиду, каков будет порядок инициализации глобальных переменных,
расположенных в разных единицах трансляции,
то ответ один - порядок может быть любым.
В зависимости от тараканов в головах разработчиков компилятора.
Но это будет сделано до входа в main.
Цитата:
При выполнении CurrentPosition* Position= new CurrentPosition переменная Position уже будет знать, что она extern ?
Оно же явно не сделано static, а значит и так extern.
А вот из-за объявления в заголовке,
во всех единицах трансляции, которые его включают,
компилятор видит что такое Position,
и может проверить и построить код,
оставив проблемы с определением Position на совести линкера.
Цитата:
Если переменная Position используется в постоянно выполняемых с определенного момента callback-функциях в обеих cpp -файлах, то не может ли возникнуть ошибка когда обе функции одновременно попытаются получить к ней доступ на запись. Если может, то как этого избежать? Просто я использую внешнюю библиотеку, которая предполагает использование ее callback-функций. Они нужны для разных, но параллельных взаимосвязанных задач. И нет понимания как такое работает с моей extern структурой Position
Если у Вас однопоточное приложение - то не может.
Если же потоков несколько, то необходимо позаботится о синхронизации,
например, использовав std::mutex или обеспечив атомарность std::atomic.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выполнения кода из label.Caption Giku Помощь студентам 7 04.11.2011 13:10
время выполнения кода Pein95 Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2011 23:00
Ограничение времени выполнения кода Crystallon Общие вопросы Delphi 10 16.06.2010 21:59
Форма для выполнения кода segail Microsoft Office Excel 3 16.03.2010 13:28
Последовательность выполнения процедур lemeshev Общие вопросы Delphi 4 15.05.2009 20:33