Что должно быть в с-файле, а что должно быть в h-файле? Перевод Включая один исходный файл C в другой? Что может быть в заголовочном файле.

Исходные файлы

Текст программы на языке Си может быть разделен на несколько исходных файлов. Исходный файл представляет собой текстовый файл, который содержит либо всю программу, либо ее часть. При компиляции исходной программы каждый из составляющих ее исходных файлов должен быть скомпилирован отдельно, а затем связан с другими файлами компоновщиком. Отдельные исходные файлы можно объединять в один исходный файл, компилируемый как единое целое, посредством директивы препроцессора #include .

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

Исходный файл не обязательно должен содержать выполняемые операторы. Иногда удобно размещать определения переменных в одном файле, а в других файлах использовать эти переменные путем их объявления. В этом случае определения переменных становятся легко доступными для поиска и модификации. Из тех же соображений именованные константы и макроопределения обычно собирают в отдельные файлы и включают их посредством директивы препроцессора #include в те исходные файлы, в которых они требуются.

Указания компилятору обычно действуют только для отдельных участков исходного файла. Специфические действия компилятора, задаваемые указаниями, определяются конкретной реализацией компилятора языка Си.

В нижеследующем примере исходная программа состоит из двух исходных файлов. Функции main и max представлены в отдельных файлах. Функция main использует функцию max в процессе своего выполнения.

/* исходный файл 1 - функция main */

extern int max (int, int); /* объявление функции */

main () /* определение функции */

int w = ONE, x = TWO, у = THREE;

/* исходный файл 2 - функция max */

int max (a, b) /* определение функции */

В первом исходном файле функция max объявлена, но не определена. Такое объявление функции называется предварительным; оно позволяет компилятору контролировать обращение к функции до того, как она определена. Определение функции main содержит вызовы функции max .

Строки, начинающиеся с символа #, являются директивами препроцессора. Директивы указывают препроцессору на необходимость замены в первом исходном файле идентификаторов ONE, TWO, THREE на соответствующие значения. Область действия директив не распространяется на второй исходный файл.

Программирование Козлова Ирина Сергеевна

27. Исходные файлы С++

27. Исходные файлы С++

Программа на C++ чаще всего включает в себя большое число исходных файлов, в каждом из которых находятся описания типов, функций, переменных и констант. Чтобы имя можно было применять в разных исходных файлах для ссылки на определенный объект, оно должно быть описано как внешнее. К примеру:

extern double sqrt(double); extern instream cin;

Самый простой способ обеспечить согласованность исходных файлов – помещение таких же описаний в отдельные файлы, которые называются заголовочными (или хэдер) файлами, после чего включить, т. е. скопировать, эти заголовочные файлы во все файлы, где необходимы эти описания. К примеру, если описание sqrt располагается в заголовочном файле для стандартных математических функций math.h и необходимо извлечь квадратный корень из 4, следует применить программу:

Так как обычные заголовочные файлы состоят из большого числа исходных файлов, в них нет описаний, которые не должны повторяться.

В команде включения include имя файла, которое располагается в угловых скобках, например, относится к файлу с таким именем в стандартном каталоге (обычно это /usr/include/CC); на файлы, хранящиеся в других местах, ссылаются, применяя имена, расположенные в двойных кавычках. Например:

#include «math1.h» #include «/usr/bs/math2.h»

включит math1.h из текущего пользовательского каталога, а math2.h из каталога /usr/bs.

Покажем, как мы могли бы определить тип потока вывода ostream. Для упрощения задачи предположим, что для буферизации определен тип streambuf. Тип streambuf определен в том месте, где также располагается и настоящее определение ostream. Значение типа, определяемого пользователем, специфицирует данные, которые нужны для представления объекта этого типа, и большое число операций для работы с этими объектами. Определение состоит из двух частей: закрытой (private) части, в которой находится информация, используемая только его разработчиком, и открытой (public) части, являющейся интерфейсом типа с пользователем.

Из книги Программы и файлы Windows автора Климов А

DBX-файлы В файлах с расширением DBX хранятся записи программы Outlook Express. В этих файлах, называемых Банком сообщений, находятся письма, сообщения новостных групп и т.п. При желании, можно скопировать эти файлы на носитель информации для переноса данных в другой компьютер.

Из книги Программирование автора Козлова Ирина Сергеевна

INF-файлы В данной статье мы рассмотрим, что представляет собой INF-файл, как с его помощью работать с другими файлами и реестром, создавать ярлыки, запускать программы и т.д.Как известно, для более-менее серьезного программного продукта обычно требуется специальная

Из книги Win2K FAQ (v. 6.0) автора Шашков Алексей

12. Комментарии. Исходные файлы Комментарием является набор символов, игнорируемых компилятором. Но на данный набор символов накладываются определенные ограничения. Внутри набора символов, представляющих комментарий, не может быть специальных символов, которые

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

27. Исходные файлы С++ Программа на C++ чаще всего включает в себя большое число исходных файлов, в каждом из которых находятся описания типов, функций, переменных и констант. Чтобы имя можно было применять в разных исходных файлах для ссылки на определенный объект, оно

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Файлы По многочисленным просьбам открываем раздел с полезными файлами для W2k. Раздел состоит из двух частей, первая официальные патчи от Microsoft (не все, а только те, что кажутся нам наиболее важными), и вторая часть, куда войдут все файлы упоминавшиеся в FAQ, просто утилитки,

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Из книги КОМПАС-3D для студентов и школьников. Черчение, информатика, геометрия автора Большаков Владимир

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Исходные файлы Текст программы на языке Си может быть разделен на несколько исходных файлов. Исходный файл представляет собой текстовый файл, который содержит либо всю программу, либо ее часть. При компиляции исходной программы каждый из составляющих ее исходных файлов

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Приложение 2 Исходные данные для твердотельного моделирования

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Приложение 3 Исходные данные для моделирования семейств

Из книги Wiki-правительство [Как технологии могут сделать власть лучше, демократию – сильнее, а граждан – влиятельнее] автора Новек Бет

CPL-файлы Из нескольких предыдущих абзацев вы узнали практически все теоретические выкладки, которые необходимы для работы с программой rundll32.exe. Сейчас же будут перечислены те возможности, которые данная программа может предоставить пользователю. Начнем с описания

Из книги UNIX - универсальная среда программирования автора Пайк Роб

1.5.4. Исходные тексты Linux - система с открытым кодом, не так ли? Верховным судьей, определяющим, как работает система, является исходный код самой системы. К нашему счастью, он доступен бесплатно. В имеющийся дистрибутив Linux могут входить исходные тексты всей системы и всех

Из книги автора

А.3.5. Исходные тексты программы-калькулятора В листинге А.3 показан текст программы, вычисляющей значения постфиксных выражений.Листинг А.3. (calculator.c) Основная часть программы-калькулятора/* Вычисления в унарном формате. *//* На вход программы подаются однострочные

Из книги автора

Приложение Г Различные исходные коды Г.1. Заголовочный файл unp.h Почти каждая программа в этой книге начинается с подключения заголовочного файла unp.h, показанного в листинге Г.1. Этот файл подключает все стандартные системные заголовочные файлы, необходимые для работы

Из книги автора

Из книги автора

Приложение 3 Исходные тексты калькулятора hoc These files contain all the code from "The Unix Programming Environment", by Brian Kernighan and Rob Pike (Prentice Hall, 1984, ISBN 0-13-937681-X). A separate hoc6 distribution contains any fixes that we have applied to that; the version in this file is from the book.Copyright © Lucent Technologies, 1997. All Rights ReservedPermission to use, copy, modify, and distribute this software and its documentation for



vote online (8)

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

Кстати, я пропустил вторую часть вопроса. Если файл C включен в другой файл и в то же время включен в проект, вы, вероятно, столкнетесь с проблемой дублирования символов, почему связывание объектов, то есть одна и та же функция будет определена дважды (если только они не статичны).

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

Однако, в зависимости от настроек вашего файла или проекта, включенный файл c может генерировать отдельный файл объекта. При связывании это может привести к двойным определенным символам.

В зависимости от вашей среды сборки (вы не укажете) вы можете обнаружить, что она работает именно так, как вы хотите.

Тем не менее, существует множество сред (как IDE, так и много обработанных вручную Makefile), которые ожидают компиляции * .c - если это произойдет, вы, вероятно, столкнетесь с ошибками компоновщика из-за дублирования символов.

Как правило, эту практику следует избегать.

Если вы обязательно должны # включить источник (и обычно этого следует избегать), используйте другой файл для файла.

Вы можете использовать компилятор gcc в linux для связывания двух файлов c одним выходом. Предположим, у вас есть два c-файла, один из которых - «main.c», а другой - «support.c». Таким образом, команда для соединения этих двух

Gcc main.c support.c -o main.out

Эти два файла будут связаны с одним выходом main.out. Для запуска вывода команда будет

./main.out

Если вы используете функцию main.c, которая объявлена ​​в файле support.c, тогда вы должны объявить ее в основном также с использованием класса extern storage.

Я думал, что поделюсь ситуацией, когда моя команда решила включить файлы.c. Наш архитектор в основном состоит из модулей, которые развязаны через систему сообщений. Эти обработчики сообщений являются общедоступными и вызывают множество локальных статических рабочих функций для выполнения своей работы. Проблема возникла при попытке получить покрытие для наших единичных тестовых случаев, так как единственный способ реализовать этот частный код реализации был косвенно через общий интерфейс сообщений. С некоторыми функциями работника в коленях в стеке это оказалось кошмаром для обеспечения надлежащего покрытия.

Включение файлов.c дало нам возможность добраться до винтика в машине, нам было интересно тестировать.

Язык C не запрещает такой тип #include, но результирующая единица перевода еще должна быть действительной C.

Я не знаю, какую программу вы используете с.prj-файлом. Если вы используете что-то вроде «make» или Visual Studio или что-то еще, просто убедитесь, что вы устанавливаете его список файлов, которые должны быть скомпилированы без того, который не может быть скомпилирован независимо.

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

Предположим, что у вас сложная критически важная подсистема с довольно небольшим общественным интерфейсом и много нереализованного кода реализации. Код работает до нескольких тысяч строк, сотни частных функций и довольно немного частных данных. Если вы работаете с нетривиальными встроенными системами, вы, вероятно, достаточно часто справляетесь с этой ситуацией.

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

С помощью C вы можете много потерять, сделав это. Практически все инструментальные средства обеспечивают достойную оптимизацию для единой единицы компиляции, но очень пессимистично относятся к чему-либо объявленному extern.

Если вы поместите все в один исходный модуль C, вы получите -

    Улучшения производительности и размера кода - во многих случаях вызовы функций будут встроены. Даже без инкрустации, у компилятора есть возможности для создания более эффективного кода.

    Данные уровня канала и функции скрываются.

    Избегание загрязнения пространства имен и его следствие - вы можете использовать менее громоздкие имена.

    Более быстрая компиляция и связь.

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

Однако вам нужно навязать некоторые соглашения, чтобы справиться с этим. В какой-то степени это будет зависеть от вашей инструментальной цепочки, но некоторые общие указатели -

    Поместите открытый интерфейс в отдельный файл заголовка - вы все равно должны это делать.

    Имейте один основной файл.c, который включает все дочерние файлы.c. Это может также включать код для открытого интерфейса.

    Используйте защитники компилятора, чтобы частные заголовки и исходные модули не были включены внешними модулями компиляции.

    Все личные данные и функции должны быть объявлены статическими.

    Поддерживайте концептуальное различие между.c и.h файлами. Это использует существующие соглашения. Разница в том, что у вас будет много статических объявлений в ваших заголовках.

    Если ваша инструментальная цепочка не накладывает никаких оснований, не следует указывать частные файлы реализации как.c и.h. Если вы используете включенные охранники, они не будут генерировать код и не будут вводить никаких новых имен (в результате вы можете столкнуться с некоторыми пустыми сегментами). Огромное преимущество заключается в том, что другие инструменты (например, IDE) будут обрабатывать эти файлы соответствующим образом.

Это нормально? да, он будет компилировать

это рекомендуется? файлы no - .c компилируются в файлы.obj, которые связаны после компиляции (компоновщиком) в исполняемый файл (или библиотеку), поэтому нет необходимости включать один файл.c в другой. Вместо этого вы, скорее всего, захотите сделать файл.h, в котором перечислены функции / переменные, доступные в другом.c файле, и включить файл.h

support.microsoft

При изменении исходных файлов в Visual C++ и сохранить их, строки должны завершаться символов "CR/LF" [символ возврата каретки, перевода строки] сочетание. В системах UNIX строк завершаются при помощи "LF". Таким образом, при просмотре файлы, которые были изменены в группе Windows в системах UNIX может появиться множество "^ M" символы в строках. Это происходит только при использовании редактора не знает, как интерпретировать файл Windows. Visual C++ можно открывать файлы, у строк, заканчивающихся с создания UNIX LF. Если изменить этот файл и Сохраните его из Visual C++, а затем оно сохраняется в формате Windows (вы увидите CR/LF и не LF, которая ранее была в системе).

В данной статье Описывает процедуры для сохранения измененного файла, созданного на платформе Windows в формате, который может использоваться в системах UNIX.

ПРИМЕЧАНИЕ : Visual C++.NET IDE содержит функции, доступные для сохранения файла в формате UNIX. В интегрированной среде разработки сохраните файл с помощью Сохранить как... , выберите из раскрывающегося списка сохранить Сохраните с кодировкой... , и нажмите кнопку thrn Да . Выберите из раскрывающегося списка Кодировка строки UNIX (LF) , а затем нажмите кнопку ОК .

Можно использовать следующие шаги для создания консольного приложения Win32 проект, который преобразует файл, содержащий "CR/LF" для завершения строки для "LF":

  1. Чтобы создать новую с помощью консольных приложений Win32 пустой проект с именем DOS2UNIX.
  2. Из Файл меню, нажмите кнопку Новый , а затем нажмите кнопку Файлы Вкладка.
  3. Выберите Исходный файл C/C++ и введите имя нового файла DOS2UNIX.cpp.
  4. Вставьте следующий код в DOS2UNIX.cpp:

    #include #include #include using namespace std; int main(int argc, char* argv) { if(argc !=2) { cout << "Please specify: dos2unix filename" << endl; return 0; } char ch; char temp="\0"; //Open the file for reading in binarymode. ifstream fp_read(argv, ios_base::in \ / ios_base::binary); sprintf(temp, "%s.temp", argv); //Create a temporary file for writing in the binary mode. This //file will be created in the same directory as the input file. ofstream fp_write(temp, ios_base::out \ / ios_base::trunc \ / ios_base::binary); while(fp_read.eof() != true) { fp_read.get(ch); //Check for CR (carriage return) if((int)ch == 0x0D) continue; if (!fp_read.eof())fp_write.put(ch); } fp_read.close(); fp_write.close(); //Delete the existing input file. remove(argv); //Rename the temporary file to the input file. rename(temp, argv); //Delete the temporary file. remove(temp); return 0; }

  5. Из Построение меню, нажмите кнопку Создание DOS2UNIX.exe для создания EXE-файла.

Может потребоваться проверить этот exe-файл, чтобы увидеть, если он работает правильно. Для этого откройте файл в двоичном редакторе Visual C++ При выборе Открыть в группе Файл меню, выбрав DOS2UNIX.ex, Настройка Открыть как Кому Двоичный , а затем щелкнув Открыть . Например, если файл содержит "hellocrlfworld", двоичный файл данные (шестнадцатеричный) будет выглядеть так:

48 65 6 C 6 C 6F 0 D 0A 57 6F 72 6 C 64

Это эквивалентно:

Привет
Мир

В командной строке выполните команду dos2unix.exe . Далее откройте файл в двоичном редакторе Visual C++. Вы увидите, что 0x0d s, удаляются. Пока не изменить файл и сохранить его в Visual C++ 0x0d s не появится.

Это можно использовать в сочетании с Модели автоматизации Visual C++ автоматизировать весь процесс. Простой Microsoft Visual Базовый сценарий макросов могут быть написаны для вызова данного средства, но сначала необходимо это средство добавить Сервис меню выглядит следующим образом:

  1. Из Сервис меню, нажмите кнопку Настройка , а затем нажмите кнопку Сервис Вкладка.
  2. Укажите имя, например DOS2UNIX, и укажите полный путь к файлу Dos2unix.exe в Команда поле редактирования.
  3. Задайте для аргумента, $(Filename)$(FileExt).
  4. Укажите исходный каталог $(WkspDir) (укажите свой собственный путь).

Для проверки работы программы, откройте файл в Visual C++ редактор, а затем из Сервис меню запуска DOS2UNIX средство. Вы увидите, что файл, открытый в редакторе были удалены все его символы CR.

Если необходимо автоматизировать этот процесс обработать таким образом, чтобы при каждом сохранении открытого файла в редакторе Visual C++ средство DOS2UNIX.exe вызывается для удаления 0x0d s, а затем используйте следующий макрос VBScript:

"This event is fired every time the document is saved in the VC++ Editor. Sub Application_DocumentSave(theDocument) "This will call the user tool in the Tools menu. "Change the number depending upon what you have. By default you only "have 6 tools under the Tools menu, so the DOS2UNIX tool will be the 7th. ExecuteCommand "UserTool7" End Sub

Этот код VBScript будет работать только в том случае, если у вас есть файлы, открытые в Редактор Visual C++. Это единственный способ вызова exe-файл из VBScript макрос (макрос VBScript нельзя передать параметры). Можно написать в Вместо этого и это будет более гибким. Вызовите инструмент "DOS2UNIX.exe" из надстройки без необходимости добавлять его к Сервис меню.

В Visual C++ с использованием предоставленного VBScript макроса:

  1. Открыть существующий файл с расширением.dsm или создать один.
  2. Вставьте код, ранее приведенными в файл.
  3. В Visual C++ выполните следующие действия.
    1. Из Сервис меню, нажмите кнопку Настройка .
    2. Нажмите кнопку Файлы макросов и надстроек Вкладка.
    3. Нажмите кнопку Обзор загрузить файл.dsm, содержащий макрос. Один раз в файле.dsm был выбран в Обзор диалоговое окно, файл появится в Надстроек и макросов список файлов с помощью выбранного флажка рядом с ним.
    4. Нажмите кнопку Закрыть для продолжения.

Теперь, если открыть файл в редакторе Visual C++ и сохранить из файла Файл меню, вызываемого макроса и все 0x0d s будет удален из открытого файла. Так как это повлияет на любой файл, сохранить с этого момента ведется и применяются к любому проекту открыть в будущем, убедитесь, что отключить макрос из Сервис меню с помощью Настройка (снимите флажок рядом с макросом).



В зависимости от вашей среды сборки (вы не укажете) вы можете обнаружить, что она работает именно так, как вы хотите.

Тем не менее, существует множество сред (как IDE, так и много обработанных вручную Makefile), которые ожидают компиляции * .c - если это произойдет, вы, вероятно, столкнетесь с ошибками компоновщика из-за дублирования символов.

Как правило, эту практику следует избегать.

Если вы обязательно должны # включить источник (и обычно этого следует избегать), используйте другой файл для файла.

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

Кстати, я пропустил вторую часть вопроса. Если файл C включен в другой файл и в то же время включен в проект, вы, вероятно, столкнетесь с проблемой дублирования символов, почему связывание объектов, то есть одна и та же функция будет определена дважды (если только они не статичны).

Язык C не запрещает такой тип #include, но результирующая единица перевода еще должна быть действительной C.

Я не знаю, какую программу вы используете с.prj-файлом. Если вы используете что-то вроде «make» или Visual Studio или что-то еще, просто убедитесь, что вы устанавливаете его список файлов, которые должны быть скомпилированы без того, который не может быть скомпилирован независимо.

Вы можете использовать компилятор gcc в linux для связывания двух файлов c одним выходом. Предположим, у вас есть два c-файла, один из которых - «main.c», а другой - «support.c». Таким образом, команда для соединения этих двух

Gcc main.c support.c -o main.out

Эти два файла будут связаны с одним выходом main.out. Для запуска вывода команда будет

./main.out

Если вы используете функцию main.c, которая объявлена ​​в файле support.c, тогда вы должны объявить ее в основном также с использованием класса extern storage.

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

Предположим, что у вас сложная критически важная подсистема с довольно небольшим общественным интерфейсом и много нереализованного кода реализации. Код работает до нескольких тысяч строк, сотни частных функций и довольно немного частных данных. Если вы работаете с нетривиальными встроенными системами, вы, вероятно, достаточно часто справляетесь с этой ситуацией.

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

С помощью C вы можете много потерять, сделав это. Практически все инструментальные средства обеспечивают достойную оптимизацию для единой единицы компиляции, но очень пессимистично относятся к чему-либо объявленному extern.

Если вы поместите все в один исходный модуль C, вы получите -

    Улучшения производительности и размера кода - во многих случаях вызовы функций будут встроены. Даже без инкрустации, у компилятора есть возможности для создания более эффективного кода.

    Данные уровня канала и функции скрываются.

    Избегание загрязнения пространства имен и его следствие - вы можете использовать менее громоздкие имена.

    Более быстрая компиляция и связь.

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

Однако вам нужно навязать некоторые соглашения, чтобы справиться с этим. В какой-то степени это будет зависеть от вашей инструментальной цепочки, но некоторые общие указатели -

    Поместите открытый интерфейс в отдельный файл заголовка - вы все равно должны это делать.

    Имейте один основной файл.c, который включает все дочерние файлы.c. Это может также включать код для открытого интерфейса.

    Используйте защитники компилятора, чтобы частные заголовки и исходные модули не были включены внешними модулями компиляции.

    Все личные данные и функции должны быть объявлены статическими.

    Поддерживайте концептуальное различие между.c и.h файлами. Это использует существующие соглашения. Разница в том, что у вас будет много статических объявлений в ваших заголовках.

    Если ваша инструментальная цепочка не накладывает никаких оснований, не следует указывать частные файлы реализации как.c и.h. Если вы используете включенные охранники, они не будут генерировать код и не будут вводить никаких новых имен (в результате вы можете столкнуться с некоторыми пустыми сегментами). Огромное преимущество заключается в том, что другие инструменты (например, IDE) будут обрабатывать эти файлы соответствующим образом.

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

Однако, в зависимости от настроек вашего файла или проекта, включенный файл c может генерировать отдельный файл объекта. При связывании это может привести к двойным определенным символам.

вы должны добавить заголовок, подобный этому

#include

примечание: оба файла должны размещаться в одном месте

Вы можете правильно включить файлы.C или.CPP в другие исходные файлы. В зависимости от вашей среды IDE вы обычно можете предотвращать двойную привязку, просматривая свойства исходных файлов, которые хотите включить, обычно щелкая правой кнопкой мыши по ним и щелкая по свойствам, и снимите флажок / проверить компиляцию / ссылку / исключить из сборки или любой другой вариант. может быть. Или вы не можете включить файл в сам проект, поэтому среда IDE даже не знает, что она существует, и не попытается ее скомпилировать. И с make-файлами вы просто просто не ставили файл в него для компиляции и компоновки.

EDIT: Извините, я дал ответ вместо ответа на другие ответы:(



error: Content is protected !!