как определить переменную в одном файле и использовать ее в другом - PullRequest
0 голосов
/ 15 октября 2011

Вопрос может быть очень простым, но я все равно не понимаю ...

У меня есть два файла ... и я упоминаю, что я хочу сделать.

файл 1

...
j = data->alloc_len;
...

файл 2

...
  for(i=0;i<j;i++)
...

Из приведенного выше ясно, что я хочу присвоить значение переменной в одном файле и хочуиспользуйте это значение в другом файле.

Я попытался #include "file1.c" в file2.c, но он дает много ошибок повторного объявления.

Я попытался создать отдельный заголовочный файл, который имеет только одну строку int j, а затем включилв обоих файлах используется extern, но опять же нет никакой пользы. Хотя я думаю, что заголовочные файлы предназначены для того, где я могу создать и присвоить значение переменной в одном файле, а затем это значение может быть распространено на все другие файлы, включая этот,

Может быть, я ошибаюсь, но мне это нужно в ближайшее время, поэтому, пожалуйста, помогите мне ... Спасибо заранее.

Ограничение -

Значение можетбыть назначенным только через file1.c, потому что структура data объявлена ​​и определена только здесь. Я не могу предоставить значение для variable j в заголовочном файле.

РЕДАКТИРОВАТЬ:

Хотя я упоминал, но думаю, что не смог очистить свой вопрос. Я попытался использовать заголовочные файлы.

Для отладки я попробовал этот пример

 extern int j;

file1.c

 #include "sample.h"
 int j=245;

file2.c

  #include "sample.h"
  printf("%d",j);

ноошибка его получения.

Ошибка, которую я получаю:

    Couldn't open module sample.so, tried:
sample.so: cannot open shared object file: No such file or directory
./sample.so.so: cannot open shared object file: No such file or directory
/usr/local/lib/sendip/sample.so.so: 
    cannot open shared object file: No such file or     
    directory
/usr/local/lib/sendip/sample.so: undefined symbol: j

* фактически ни один из файлов не содержит основной функции *

На самом деле этоочень большой проект, и я использую Makefile, и все файлы будут связаны во время выполнения.

Короче говоря, выполнение можно понимать как файл main.c, который содержит main, который вповороты вызова file1.c и который, в свою очередь, вызывает file2.c

Об описательных именах, я бы сказал, что они просто показаны здесь, иначе я уже использую описательные имена.

Ответы [ 3 ]

2 голосов
/ 15 октября 2011

Вы могли бы поместить это в заголовочный файл:

extern int j;

и объявить только "настоящее" j в file1.c.Если file2.c включает этот заголовок, то он может использовать переменную j.

Но , использовать описательные имена переменных, как минимум, для глобальных.И вам следует избегать глобальных переменных настолько, насколько вы можете, это долгосрочное обязательство, ИМО.

(Вы можете рассмотреть что-то вроде создания функции в file1.c, которая возвращает это значение. Это имеет преимуществообеспечения того, чтобы j контролировался в file1.c и читался только в других местах, что ограничивает сложность понимания того, кто «владеет» этой переменной.)

0 голосов
/ 15 октября 2011

#include "file1.c" почти никогда не является правильным решением проблемы. Неизменно вы хотите объявлять вещи в заголовочных файлах, а затем определять их в одном исходном файле.

file1.h

extern int j;

file1.c

#include "file1.h"
j = data->alloc_len

file2.c

#include "file1.h"
if (j>0)
    ...

Сказав все это, я настоятельно советую вам передавать значения в качестве параметров, а не использовать глобальное состояние. Глобальное государство это зло. Избегайте этого, как чумы.

0 голосов
/ 15 октября 2011

вот так

в файле c вы определяете переменную скажем file1.c, которую вы пишете

int j;

...

j = data->alloc_len;

заголовок для вашего file1.h будет содержать

extern int j;

этот заголовок вы включаете в file2.c

#include "file1.h"

, но я бы предложил использовать более описательное имя переменной.

...