Во-первых, в .h -файлах нет никаких функций. Это просто кусок текста, вставляемый перед компиляцией вместо соответствующих директив #include . Соответственно, с точки зрения компилятора нет никакой разницы, включили ли вы заголовочный файл или просто взяли и скопировали его содержимое в свой .cpp руками.
То есть для решения вашей задачи нет разницы между заголовочным файлом с объявлением функции:
#pragma once void foo(int bar);
#include «decl.h» int main() < foo(21); // Использование функции >
#include «decl.h» void foo(int bar) < // Реализация функции >
и повтором объявления в каждом .cpp -файле, которому нужна эта функция:
void foo(int bar); int main() < foo(21); // Использование функции >
void foo(int bar) < // Реализация функции >
Во-вторых, .cpp -файл — это «вещь в себе», чёрный ящик с двоичными данными и списком того, что этот ящик импортирует/экспортирует, и по каким байтовым смещениям в вышеуказанных данных это требуется/реализуется соответственно:
Передача параметров в функцию по указателю c++. Передача указателя в функцию си. Урок #48
- Если в .cpp -файле производится обращение к чему-то, нереализованному в этом файле, и у компилятора есть объявление (то есть прототип для проверки корректности обращения), генерируется импорт этого чего-то по имени.
- Если в .cpp -файле объявляется не- static переменная либо функция (методы классов, кстати, тоже полноценные функции), генерируется экспорт.
И только потом, на этапе компоновки производится связывание соответствующих импортов и экспортов этих «чёрных ящиков» (а также подобных «ящиков», составляющих реализацию стандартной библиотеки).
Отслеживать
ответ дан 19 окт 2017 в 21:25
Arhadthedev Arhadthedev
11.4k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
Общий принцип — объявление ( void sort_mass(int*, int); ) должно быть доступно в момент использования для успешной компиляции (поэтому их обычно располагают в заголовочных файлах, включаемых в другие файлы.
Определение (тело функции) необходимо во время компоновки, и должно быть (если это не inline или static функция) единственным в программе. Поэтому, если оно находится в отдельном файле, этот файл должен быть скомпилирован и скомпонован с основной программой (включен в проект).
Такой файл может включаться в уже скомпилированном виде (как объектный файл или в составе библиотеки).
Отслеживать
ответ дан 15 окт 2017 в 13:12
215k 15 15 золотых знаков 117 117 серебряных знаков 228 228 бронзовых знаков
Вы вызываете ее не «оттуда». Вызывается код функции, до компоновки находящийся в другом файле. А чтобы компилятор мог это сделать, ему нужно знать, что такая функция — с данным именем и параметрами — существует. Это как бы обещание 🙂 — мол, вызывай, не бойся — компоновщик найдет, что именно вызывать.
Источник: ru.stackoverflow.com
Передача параметров в функцию по значению. Параметры функции. Передача аргументов в функцию. #34
Сохранение файл-функции.
После введения текста файл-функции, ее следует сохранить в текущем рабочем каталоге. Для этого в главном меню следует выбрать пункт Save из вкладки EDITOR и далее в ниспадающем окне указать Save As. В результате в появившемся диалоговом окне Select File for Save As раскроется каталог MATLAB папки Документы, который по умолчанию определен в качестве текущего рабочего каталога. В общем случае размещать М-файл с определением файл-функции, необходимо в одном из каталогов диска, входящих в список доступа системы MATLAB. Данный вопрос уже обсуждался ранее в параграфе 1.1 при изучении файл-программ.
В полях Имя файла и Тип файла этого диалогового окна автоматически появятся требуемые имя и тип файл-функции. Содержимое указанных полей менять не требуется. В рассматриваемом случае в поле Имя файла будет предложено имя sample2. Вообще, указанное в заголовке имя файл- функции должно совпадать с именем файла (без учета расширения .т), в который записывается текст файл-функции. Несогласованность имени функции и имени файла не допускается.
Выполнение файл-функции.
Созданную файл-функцию можно использовать как в командном режиме (аналогично любой встроенной функции системы MATLAB), гак и вызывать из других файл-программ или файл-функций. При вызове файл- функции следует указать все ее входные и выходные параметры. В частности, в рассматриваемом примере обязательным является задание единственного входного параметра х. Вычислим, например, значение функции sample2 при х=4, а результат присвоим некой переменной у. Будем иметь:
При вызове файл-функции MATLAB проверяет, относится ли ее имя к какой-либо переменной, встроенной функции, либо к М-файлу в текущем рабочем каталоге или в каталоге, установленном в пути поиска. Если объект с таким именем есть, будет выполнен именно он. В этой связи, во избежание путаницы, файл-функциям, как и файл-программам следует присваивать уникальные имена.
При создании файл-функции sample2 были определены две переменные: входная переменная х и выходная f. Для того, чтобы убедиться в том, что эти переменные являются локальными и не появляются в рабочем пространстве после вызова файл-функции, можно обратиться к ним после выполнения данной файл-функции и получить сообщения об ошибках:
Undefined function or variable ‘x’.
Undefined function or variable ‘f’.
Существует еще один способ вызова файл-функции, используемый при необходимости ограничить доступ к некоторой М-функции, расположенной в заданном каталоге. В этом случае в данном каталоге нужно создать дочерний каталог с именем private и поместить туда указанную функцию. В результате все функции из каталога private будут доступны лишь функциям из родительского каталога.
Источник: bstudy.net
Как вызвать функцию из другого файла в Python?
https://youtu.be/l8n4mkq-tgo Введение Если вы новичок в Python и наткнулись на этот вопрос, то я приглашаю вас читать, как я обсуждаю, как позвонить в функцию из другого файла. Скорее всего, вы использовали некоторые встроенные функции Python, уже как Print () и Len (). Но что, если вы определили свою собственную функцию, сохранены … Как вызвать функцию из другого файла в Python? Подробнее “
Автор оригинала: Peter Rubio.
Вступление
Если вы новичок в Python и наткнулись на этот вопрос, то я приглашаю вас читать, как я обсуждаю, как позвонить в функцию из другого файла. Вы, скорее всего, использовали некоторые из Python’s Встроенные функции уже вроде Печать () и Лен () Отказ Но что, если вы определили свою собственную функцию, сохранили его в файл и хотели бы вызвать его в другом файле?
Импортируйте!
Если вы когда-либо импортировали что-то вроде случайного, Numpy или Math, то это действительно так просто, как это! Если у вас нет, то вот быстрый взгляд на то, как это сделано.
В качестве примера давайте будем использовать математический модуль, чтобы найти квадратный корень номера.
Во-первых, мы им импортируем.
>>> import math >>>
Чтобы увидеть доступные функции и атрибуты для модуля, используйте встроенный функцию dir () :
>>> dir(math) [‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘acos’, ‘acosh’, ‘asin’, ‘asinh’, ‘atan’, ‘atan2’, ‘atanh’, ‘ceil’, ‘comb’, ‘copysign’, ‘cos’, ‘cosh’, ‘degrees’, ‘dist’, ‘e’, ‘erf’, ‘erfc’, ‘exp’, ‘expm1’, ‘fabs’, ‘factorial’, ‘floor’, ‘fmod’, ‘frexp’, ‘fsum’, ‘gamma’, ‘gcd’, ‘hypot’, ‘inf’, ‘isclose’, ‘isfinite’, ‘isinf’, ‘isnan’, ‘isqrt’, ‘ldexp’, ‘lgamma’, ‘log’, ‘log10’, ‘log1p’, ‘log2’, ‘modf’, ‘nan’, ‘perm’, ‘pi’, ‘pow’, ‘prod’, ‘radians’, ‘remainder’, ‘sin’, ‘sinh’, ‘sqrt’, ‘tan’, ‘tanh’, ‘tau’, ‘trunc’]
Функция для расчета квадратного корня называется « SQRT ‘. И мы будем использовать точечную обозначение, чтобы вызвать это:
>>> math.sqrt(64) 8.0 >>>
Кроме того, вы можете использовать ключевое слово « из », а затем имя модуля и « Импорт », а затем атрибут или функция. Таким образом, мы больше не должны использовать нотацию DOT при вызове квадратной корневой функции.
>>> from math import sqrt >>> sqrt(81) 9.0
И, как и ожидалось, пытаясь получить доступ к другим функциям или атрибутам все еще требует записи DOT:
>>> pi Traceback (most recent call last): File «», line 1, in NameError: name ‘pi’ is not defined >>> math.pi 3.141592653589793
Определенные пользователем функции
По мере того, как вы прогрессируете в своем кодировании Python, вы в конечном итоге создадите свои собственные функции и внедрим их в другие программы. В качестве примера мы проиллюстрируем это простым калькулятором наконечника. Я приглашаю вас следовать.
Откройте свой любимый редактор Python Отказ В настоящее время я использую Linux, поэтому я просто буду использовать VI Для этого примера. Я назову свой файл ” myfunctions.py “.
Вот определение функции:
def calcTip(b): # Tip will be 20% of the bill return (b * .2)
Теперь, чтобы вызвать функцию из другого файла в Python, мы просто используем «импорт», а затем имя вашего .py файл:
>>> import myfunctions >>> totalBill = 100.00 >>> tip = myfunctions.calcTip(totalBill) >>> print(tip) 20.0
Если у вас есть несколько функций в вашем файле и хотели бы видеть их, не забудьте использовать Дир функция. В нашем случае он только показывает Calctip Функция:
>>> dir(myfunctions) [‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘calcTip’] >>>
Кроме того, не забывайте, что мы можем использовать альтернативный метод, если вы хотите пропустить нотацию DOT:
>>> from myfunctions import calcTip >>> totalBill = 250.00 >>> print(calcTip(totalBill)) 50.0 >>>
Вещи, чтобы осмотреть для
Примечание в моем примере, когда я запустил интерпретатор Python, он был в том же рабочем каталоге, что и MyFunctions.py файл. Если вы не знакомы с Linux, знак доллара – это командная строка.
- PWD рабочий каталог
- Текущий каталог «/Home/Pete/Home/Python»
- Файл «MyFunctions.py» находится здесь
На дисплее ниже скриншота я меняю рабочий каталог на дом (~) и запустить PWD Чтобы показать текущий путь каталога. Затем я запустил интерпретатор Python и попытаться импортировать MyFunctions файл. Теперь он показывает « ModulenotfoundError », потому что файл не в текущем каталоге.
Если вы используете IDE Затем убедитесь, что ваш файл находится в вашем проекте. На экране ниже скриншота отображается IDE SPYDER с проектом «Функциональный пример». Скриншот « myfunctions.py » файл с определением функции кальцинг :
Скриншот файла ” main.py “. Этот конкретный IDE действительно велик, потому что поскольку файл « MyFunctions.py » находится в нашем проекте, то автозаполнение обнаруживает его, когда им импортирую.
Вот выход консоли при запуске main.py Файл, передавая переменную « Билл » в Calctip Функция:
И вот как позвонить в функцию из другого файла в Python. Я надеюсь, что вы нашли эту статью полезную и с нетерпением ждем писать больше! До скорого!
Читайте ещё по теме:
- Apex Способы получения имени файла из Path в Python
- Модуль Python Shutil: 10 Методов, Которые Вы Должны знать
- Запись в файл с помощью функции print() Python
- Обработка файлов в Python
- Функция mmap в Python – Краткий справочник
- Как получить расширение файла в Python
- Вызов C функций из Python
Источник: pythobyte.com