В настоящее время у меня есть подпрограммы и глобальные переменные, определенные выше моего main()
. Я пытаюсь создать библиотеку в C. Могу ли я объявить глобальные переменные в файле заголовка?Вы определяете глобальные переменные в библиотеке C?
ответ
Ответ да и нет. Да, вы можете объявлять глобальные переменные в файле заголовка, но вы не должны объявлять глобальные переменные, особенно если вы хотите развернуть библиотеку. Или, по крайней мере, выберите переменные, которые идут в глобальное пространство с большой осторожностью, а затем попытайтесь переосмыслить, действительно ли они полезны или лучше держать переменные в некоторых структурах контекста.
Там не должно быть никаких проблем, или вы можете объявить их в .c и использовать EXTERN в файле .h
Смотрите теги! Это примерно C, а не C++. – Olaf
Извините, я просто кодирую в C++, и именно поэтому я написал cpp вместо c, это не повод для голосования отрицательный –
Ну, это так. Поскольку типичные компиляторы-интерфейсы, такие как gcc, будут вызывать компилятор C++. Что является другим языком и очень плохой идеей при компиляции кода C. Но дело не только в этом. Ваша рекомендация просто неверна (пожалуйста, поймите разницу между _declaration_ и _definition_ и что означает спецификатор 'extern'. Btw. Это похоже на C++. См. Комментарии и другие ответы. – Olaf
Могу ли я объявить глобальные переменные в файле заголовка?
Да, вы можете объявить свои глобальные переменные в файле заголовка. Однако это должны быть объявления, а не определения ваших глобальных переменных.
Другими словами, заголовок должен сказать
// This goes into the header
extern int my_global_int;
и файл C должен сказать
int my_global_int;
Примечание: Тот факт, что вы можете сделать это не значит, что вы должен сделать это. Выявление «сырых» глобальных переменных из библиотеки является плохой практикой, потому что пользователи вашей библиотеки могут делать с ними неожиданные вещи.
Лучше было прятать свои глобалам, делая их static
, и подвергая функции, чтобы управлять ими вместо:
// This goes into the header
int get_global();
void set_global(int n);
// This goes into the C file
static int my_former_global;
int get_global() {
return my_former_global;
}
void set_global(int n) {
if (<n-is-valid>) {
my_former_global = n;
}
}
Да, можно, но это плохая привычка; не делай этого .
Надеюсь, вы имели в виду: «Это плохая привычка ** ___ ** сделать это». – Olaf
нет, что я имел в виду, существует так много подходов в C для evreything, но есть некоторые standers, которые вы должны соблюдать, чтобы другие могли легко понять ваш код, это он^_ ^ –
Постарайтесь свести к минимуму использование глобальных переменных, поскольку они делают программу менее читаемой и более подверженной ошибкам. Библиотека должна использоваться через свой интерфейс (передача данных вперед и назад между функциями, которые она предоставляет), а не путем доступа к глобальным переменным.
В ситуациях, когда нет другого способа, например совместного использования данных с помощью процедуры обслуживания прерывания, попробуйте сохранить переменные, содержащиеся в этом блоке компиляции, сделав их статическими, чтобы они не могли вмешиваться в другие библиотеки.
Если по какой-то причине вам действительно нужна глобальная переменная, определите ее в файле кода (c-файл) и объявите ее как extern в файле заголовка.
- 1. Глобальные переменные в библиотеке c
- 2. Глобальные переменные в Java
- 3. Статические/глобальные переменные в общей библиотеке в языке C
- 4. Глобальные переменные в C++
- 5. Глобальные переменные в C
- 6. глобальные переменные в C++
- 7. Глобальные переменные в C#
- 8. глобальные переменные в C++
- 9. Глобальные переменные в Objective-C
- 10. Как вы определяете константу в C?
- 11. Глобальные переменные в современном C++
- 12. Как вы определяете деконструктор в C++?
- 13. Глобальные переменные Класс C++
- 14. C# - Winforms - Глобальные переменные
- 15. Глобальные переменные, C++
- 16. Глобальные переменные в библиотеке, которые связаны несколькими объектами одного процесса
- 17. Динамические глобальные переменные в C
- 18. Глобальные переменные в Visual C#
- 19. Глобальные переменные в объекте C
- 20. общие глобальные переменные в C
- 21. c - глобальные переменные в pthreads
- 22. Глобальные переменные в C# .net
- 23. Глобальные переменные в visual C++
- 24. Глобальные глобальные переменные Django
- 25. Desktop Application C# Глобальные переменные
- 26. Как вы определяете глобальные переменные, чтобы все классы могли их просматривать и редактировать?
- 27. dlopen и глобальные переменные в C/C++
- 28. c глобальные переменные в объекте c
- 29. Глобальные переменные в библиотеке скриптов SSJS не работают должным образом
- 30. Как вы определяете многострочный макрос в C?
http://stackoverflow.com/questions/1164167/variable-declaration-in-a-header-file – fukanchik