Всичко ме задръсти напълно - глобалната променлива не се вижда от друг файл ( )

Разглеждате архивите на форума.

Автор: Make_Pic() Дата: 18/04/2005 14:00

Всичко ме задръсти напълно - глобалната променлива не се вижда от друг файл. Декларирам променлива преди main(), но как да я направя видима в други файлове на проекта?

Автор: DimaG () Дата: 18/04/2005 14:05

Опитайте да го наречете extern в други файлове

***** extern int some_value;

Изпращане редактирано (18.04.2005 14:06)

Автор: Entuziast () Дата: 18/04/2005 15:10

Направете външен, както ви посъветваха или по-добре - създайте h-файл и добавете декларации на всички променливи, които трябва да видите в други файлове. extern int MyVar;

Между другото, тук могат да бъдат поставени и прототипи на функции. Променливите и функциите ще бъдат видими във всички файлове, където включвате този файл.

Автор: Make_Pic() Дата: 18/04/2005 15:16

във функцията extern myVar компилаторът изглежда го е погълнал.

Автор: Бил () Дата: 18/04/2005 15:46

за тази цел също съществуват глобални променливи, които да описват ЕДНО време и на ЕДНО място. В противен случай, в l всяка функция, която използва тази променлива, ще трябва да бъде декларирана всеки път. Но какво ще стане, ако има много x функции?

Автор: Вова () Дата: 18/04/2005 16:05

написал или не написал mp3 декодер за lpc? каза, че е използвал GCC, как е, а?

Автор: Make_Pic() Дата: 18/04/2005 17:05

Автор: AL () Дата: 18/04/2005 18:22

Има файлове fifo.h и fifo.c, трябваше да направя една променлива глобална. Декларирах го като extern в заглавката и включвам тази заглавка във всички файлове, където използвам FIFO буфера, но също така включвам заглавката във fifo.c (от заглавкатаизползват се константи , които се дефинират чрез define) и отива във fifo.c, има както декларация на променлива, така и нейното външно описание. Има ли някакви нюанси (подводни камъни) в такова използване на или трябва да е така?

Автор: Entuziast () Дата: 18/04/2005 18:22

Автор: Вова () Дата: 18/04/2005 19:23

добре, чакаме проекта за захарта;)

Автор: Бил () Дата: 18/04/2005 21:19

Изпращане редактирано (18.04.2005 21:21)

Автор: AL () Дата: 18/04/2005 21:34

Разбираемо, иначе го направих, работи, но имаше съмнения. Благодарим ви за отговора.

Автор: patton () Дата: 18/04/2005 22:25

Автор: patton () Дата: 18/04/2005 22:46

в *.h - декларация в *.c дефиниция и extern е клас за съхранение (външен тип връзка и статичен живот) за разлика от по-защитен - статичен (вътрешен)

няма нужда да създавате ненужни обекти

Автор: Entuziast () Дата: 19/04/2005 11:32

Всичко ще се компилира и ще работи, НО вашите съмнения са правилни: програмата е логически изградена неправилно.В заглавния файл трябва да се постави само това, от което се нуждаете за да използвате обекта. И дефинираният размер на опашката, например, не трябва да бъде изваден. Ако трябва да разберете дали има място в опашката - напишете функция, която ще върне това и поставете неговия прототип в заглавния файл. Научно това се нарича капсулиране

Автор: AL () Дата: 19/04/2005 15:20

и когато включвам заглавката в C кода, тя е „може да е във файла, където се намира дефиницията " p.s. това е от Керниган и Ричи.

Изпращанередактирано (19.04.2005 15:44)

Автор: patton () Дата: 20/04/2005 22:57