ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
9 мая
1429906 Топик полностью
Tyмблep (25.04.2024 18:13, просмотров: 86) ответил Nikolay_Po на По-моему, нельзя (ну уж по крайней мере не следует) делать определение в заголовочном файле. Всё, что приводит к выделению памяти, не важно, переменных или программы, должно определяться в *.c. А в заголовочных файлах должны быть лишь объявления, не обязывающие выделять память.
Как то раз я сделал простой тест для Linux 

и был в шоке:

(Тест был сделан потому, что мне по наследству достался проект

из ~2000 года. Где автор постоянно этим пользовался, а я долго

не мог понять как всё работает)

//---------------------------------------------------------------------------

// file hello.h 2020.11.09

//---------------------------------------------------------------------------

#ifndef __HELLO_H_

#define __HELLO_H_

int iii;

void h2test(void);

#endif

//---------------------------------------------------------------------------


//---------------------------------------------------------------------------

// file hello.c 2018.09.18

//---------------------------------------------------------------------------

// gcc -o hello hello.c h2.c

//---------------------------------------------------------------------------

#include <stdio.h>

#include "hello.h"

int main (void)

{

iii=17; printf ("main iii=%d\n",iii);

h2test();

iii=19; printf ("main iii=%d\n",iii);

h2test();

iii=237; printf ("main iii=%d\n",iii);

h2test();

}

//---------------------------------------------------------------------------


//---------------------------------------------------------------------------

// file h2.c 2020.11.08

//---------------------------------------------------------------------------

#include <stdio.h>

#include "hello.h"

void h2test(void)

{

printf("h2test, iii=%d\n",iii);

}

//---------------------------------------------------------------------------

Программа успешно собралась и заработала.

Результат:

[Sasha@FEDORA14 hello]$ ./hello

main iii=17

h2test, iii=17

main iii=19

h2test, iii=19

main iii=237

h2test, iii=237