Вызов функций C и компоновка
Подключайтесь к libc и внешним библиотекам.
«Вызов функций C и компоновка» — бесплатный урок Zig Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Импорт — это не компоновка
@cImport предоставляет объявления, но настоящий машинный код по-прежнему находится в библиотеке C, с которой необходимо выполнить компоновку.
Свяжите программу с libc
Большинству вызовов C нужна стандартная библиотека C. Укажите системе сборки выполнить компоновку с libc, чтобы такие функции, как printf, разрешились во время компоновки.
exe.linkLibC();Компоновка через CLI
Для быстрого запуска передайте флаг самостоятельно. -lc подключает libc, когда вы напрямую компилируете отдельный файл.
zig build-exe main.zig -lcВызывайте как нативный код
После компоновки функция C вызывается так же, как функция Zig. Вы пишете c.printf(...), а Zig обрабатывает соглашение о вызовах.
c.printf("%d\n", 42);Соблюдайте сигнатуру
Необходимо передавать аргументы, соответствующие C-сигнатуре. Неверные типы вызывают ошибку компиляции, поскольку Zig знает переведённый прототип.
Подключите именованную библиотеку
Для других библиотек укажите их имя. linkSystemLibrary сообщает компоновщику, что нужно подключить, например, математическую библиотеку.
exe.linkSystemLibrary("m");Возвращаемые значения возвращаются
Возвращаемое значение функции C поступает как обычное значение Zig переведённого типа, готовое к сохранению или проверке.
const n = c.abs(-5);Ошибки используют соглашения C
В C нет объединений ошибок, поэтому сбои проявляются как коды возврата или установленное значение errno. Проверять их нужно вручную, по правилам C.
Без скрытого преобразования данных
Zig не выполняет бесшумное преобразование ваших данных. C получает именно то, что вы передали, поэтому вызов остаётся быстрым и предсказуемым.
Настройка в файле сборки
В build.zig вы добавляете параметры компоновки к артефакту. Тот же шаг exe, который компилирует код, также записывает сведения о его библиотеках.
exe.linkLibC();
exe.linkSystemLibrary("z");Два шага к успеху
Вызов C всегда состоит из импорта и компоновки: сначала подключите объявления, затем убедитесь, что настоящие символы доступны компоновщику.
Быстрая проверка
Подумайте, что позволяет компоновщику действительно разрешить функцию C.
Итоги
Вы узнали, что для вызова C нужны и импорт, и компоновка, после чего функции C вызываются так же, как обычные функции Zig. 🎯
Часто задаваемые вопросы
Урок «Вызов функций C и компоновка» бесплатный?
Да — полный текст урока «Вызов функций C и компоновка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Вызов функций C и компоновка»?
Подключайтесь к libc и внешним библиотекам. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Вызов функций C и компоновка»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Импорт заголовков C с помощью @cImport
- Вызов функций C и компоновка
- Указатели, строки и типы C
- zig translate-c: чтение C как Zig