Я хочу включить переменную, объявленную во внешний файл в C.Объявление переменной в заголовке C
Моя структура проекта выглядит так.
foo.h
foo.c
variable.c
main.c
Что я делаю прямо сейчас
/* main.c */
#include "foo.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
bar();
printf("%d\n", a);
return 0;
}
/* foo.h */
#ifndef FOO_H
#define FOO_H
#include "variable.c"
extern const int a;
extern const int b[];
int bar();
#endif
/* Foo .c */
#include "foo.h"
#include <stdio.h>
int bar() {
printf("tururu\n");
printf("%d\n", b[0]);
return 0;
}
/* variable.c */
const int a = 2;
const int b[3] = {1, 2, 3};
Переменные, которые я хочу, чтобы определить, таким образом, являются постоянными (только для чтения).
Я не знаю заранее размер массива, это зависит от определения в переменной.c.
Так что мой вопрос:
Является ли это правильный способ включить некоторые постоянные переменные из внешнего источника?
Если это так, что я делаю неправильно и как можно исправить?
Спасибо
EDIT: Я обновил свой код с примером, который может быть проверен. Этот код не компилируется, потому что он говорит, что «b» не объявлен в функциональной строке. Если я комментирую printf в баре, он компилируется и запускается. Итак, переменные можно увидеть по основным, а не по foo.c?
EDIT2: Переменные, включенные таким образом, доступны только для чтения. Я обновил код и добавил include foo.h в foo.c, и теперь компилятор говорит, что существует несколько определений «a» и «b»
EDIT3: очистите код и вопрос, пытающийся быть более ясными.
Возможный дубликат [Как использовать extern для обмена переменными между исходными файлами в C?] (Http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables -between-source-files-in-c) – Chostakovitch
Я прочитал, что перед тем, как написать свой вопрос, но он не ответил мне. Моя проблема в том, что я не могу определить и инициализировать мою переменную в foo.c Мне нужно это во внешнем файле и в этом вопросе эта проблема не наблюдается. Но спасибо за ссылку, это очень полезный ответ. – deckard
Я также обновил вопрос, чтобы прояснить различия. – deckard