-
- не нравятся мне всякие externЫ!!! НЕ проще сделать фифо локальным и
обращаться через функции добавления и извлечения ? - Aleksey_75(11.03.2022 11:16)
- Можно. Типа "setter" и "getter". Это практично для более высокоуровневого программирования. Ближе к объектам и методам. Обращение через функции имеет смысл, если при обращении требуются доп. операции, например, обработка счётчиков, проверки переполнения/опустошения. Nikolay_Po(316 знак., 11.03.2022 11:28)
- Если речь о Си... Я делаю так в каждом файле IBAH(482 знак., 10.03.2022 12:35)
- соптимизирую -> abivan(247 знак., 11.03.2022 16:16)
- Потому что определения не ставят в Н-файлы - Pитчи(11.03.2022 07:42, )
- Правда?! - Argon(11.03.2022 09:30)
- Да. В заголовочных файлах определения типов, объявления структур.
Если надо - то определения значений параметров, например, #define
TurnOnThreshold 53 Nikolay_Po(713 знак., 11.03.2022 10:05)
- Так речь об объявлении переменных? Почему-то думал, что выделение
памяти происходит при объявлении, а определение - это #define. - Argon(11.03.2022 10:06)
- Нет, объявление - это когда указывается тип и имя, но ничего ему не
присваивается. В заголовочном файле не делается объявление с
присвоением значения. И до присвоения значения, компилятор просто
имеет ввиду, что такая переменная должна быть ему доступна, но не
выделяет для неё памяти, пока она не понадобится. P.S. определения
подстановок #define и определения типов, хотя и являются
определениями, но не приводят к выделению памяти, так как относятся
сугубо к Nikolay_Po(14 знак., 11.03.2022 10:15)
- Э, нее! Когда указывается тип и имя, но ничего не присваивается -
память тоже выделяется. Почему-то уверен, что "int a;" в хедере
приведет к выделению памяти. - Argon(11.03.2022 10:20)
- У современных компиляторов гарантированно не так, при отличной от
нуля оптимизации. Пока не случится обращения к этой переменной,
вызывающее "побочные эффекты" Nikolay_Po(291 знак., 11.03.2022 10:33, ссылка)
- Так значит, можно такое в хедере? Argon(32 знак., 11.03.2022 10:52)
- Без присвоения - можно (но это не решает пробелмы ТС). Обычно, я
делаю только глобальные внешние объявления. Локальные переменные
остаются просто в коде *.c, без упоминаний в заголовках. Например: Nikolay_Po(1014 знак., 11.03.2022 11:10)
- Противоречие в терминах: стандартная форма объявления: тип список_переменных VLLV(1 знак., 11.03.2022 11:10, ссылка)
- В чём противоречие? Пока переменным не присвоены значения, это не
определение. - Nikolay_Po(11.03.2022 11:11)
- Я не про определение, я про объявление. - VLLV(11.03.2022 11:14)
- В чём противоречие? Пока переменным не присвоены значения, это не
определение. - Nikolay_Po(11.03.2022 11:11)
- Противоречие в терминах: стандартная форма объявления: тип список_переменных VLLV(1 знак., 11.03.2022 11:10, ссылка)
- Без присвоения - можно (но это не решает пробелмы ТС). Обычно, я
делаю только глобальные внешние объявления. Локальные переменные
остаются просто в коде *.c, без упоминаний в заголовках. Например: Nikolay_Po(1014 знак., 11.03.2022 11:10)
- Так значит, можно такое в хедере? Argon(32 знак., 11.03.2022 10:52)
- У современных компиляторов гарантированно не так, при отличной от
нуля оптимизации. Пока не случится обращения к этой переменной,
вызывающее "побочные эффекты" Nikolay_Po(291 знак., 11.03.2022 10:33, ссылка)
- Э, нее! Когда указывается тип и имя, но ничего не присваивается -
память тоже выделяется. Почему-то уверен, что "int a;" в хедере
приведет к выделению памяти. - Argon(11.03.2022 10:20)
- Казалось бы, грех путаться в терминологии, но даже авторы книжек
по-разному называют сущности. Что-то подобное встретилось недавно:
в одной книге оператор, в другой - инструкция. - Argon(11.03.2022 10:10)
- По сути, это разные вещи. "/" (деление) - это тоже оператор.
Оператор - что делать, Инструкция - как делать. И при компиляции,
один оператор может приводить к использованию нескольких
инструкций. - Nikolay_Po(11.03.2022 10:13)
- я может путаю насчет оператора и инструкции, но тем не менее был факт разного наименования одного и того же - Argon(11.03.2022 10:16)
- По сути, это разные вещи. "/" (деление) - это тоже оператор.
Оператор - что делать, Инструкция - как делать. И при компиляции,
один оператор может приводить к использованию нескольких
инструкций. - Nikolay_Po(11.03.2022 10:13)
- Нет, объявление - это когда указывается тип и имя, но ничего ему не
присваивается. В заголовочном файле не делается объявление с
присвоением значения. И до присвоения значения, компилятор просто
имеет ввиду, что такая переменная должна быть ему доступна, но не
выделяет для неё памяти, пока она не понадобится. P.S. определения
подстановок #define и определения типов, хотя и являются
определениями, но не приводят к выделению памяти, так как относятся
сугубо к Nikolay_Po(14 знак., 11.03.2022 10:15)
- Так речь об объявлении переменных? Почему-то думал, что выделение
памяти происходит при объявлении, а определение - это #define. - Argon(11.03.2022 10:06)
- Да. В заголовочных файлах определения типов, объявления структур.
Если надо - то определения значений параметров, например, #define
TurnOnThreshold 53 Nikolay_Po(713 знак., 11.03.2022 10:05)
- Правда?! - Argon(11.03.2022 09:30)
- А определение __MAIN_C ручками? - VLLV(10.03.2022 14:34)
- каждый файл *.с начинается со строки #define __FILENAME_C, я себе
сделал генератор *.с и *.h файлов по шаблону - IBAH(10.03.2022 14:39)
- Понятно. Пересмотрел топик с начала и не понял, о чем речь вообще. typedef и extern в хедер, объявление в один из файлов С. Не понимаю проблему. По хорошему имена всех копий должны быть разными (IAR, например, предупреждает, что в зоне видимости две копии - локальная и глобальная) - VLLV(10.03.2022 14:59)
- каждый файл *.с начинается со строки #define __FILENAME_C, я себе
сделал генератор *.с и *.h файлов по шаблону - IBAH(10.03.2022 14:39)
- хедер заключается в POV(61 знак., 10.03.2022 12:11)
- И получаю разные экземпляры. Я в ответе Скрипачу вынес "реализацию". - Dingo(10.03.2022 12:12)
- Для этого придумали .Н-файлы. Нет? - Cкpипaч(10.03.2022 12:05)
- Там и спрятано всё в *.h-file, при включении из другого файла
создастся другой экземпляр. В этом и изящность решения. Dingo(186 знак., 10.03.2022 12:17)
- typedef вручную? Cкpипaч(63 знак., 10.03.2022 12:25)
- Самый простой вариант, как ни думал. Если двое сошлись на чём-то -
не самый плохой. - Dingo(10.03.2022 12:42)
- Двое? Керриган и Ричи, чтоли? :) Cкpипaч(42 знак., 10.03.2022 12:47)
- Самый простой вариант, как ни думал. Если двое сошлись на чём-то -
не самый плохой. - Dingo(10.03.2022 12:42)
- Сделать ещё один хедер, в котором первой строчкой будет "#include
machas.h" . Ну и там, например, "typedef FIFO(16) myfifo_t; extern
myfifo_t myfifo;" и т.д. - SciFi(10.03.2022 12:21)
- Хотел сделать через заголовчник-прослойку, потом решил, что теряется красота решения. Dingo(295 знак., 11.03.2022 07:02)
- В хедере надо лишь extern (тогда линкер будут эту переменную искать). А сам экземпляр создавай где твоей душе угодно. - POV(10.03.2022 12:18)
- typedef вручную? Cкpипaч(63 знак., 10.03.2022 12:25)
- Там и спрятано всё в *.h-file, при включении из другого файла
создастся другой экземпляр. В этом и изящность решения. Dingo(186 знак., 10.03.2022 12:17)
- не нравятся мне всякие externЫ!!! НЕ проще сделать фифо локальным и
обращаться через функции добавления и извлечения ? - Aleksey_75(11.03.2022 11:16)