C C  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Заголовочные файлы и компоновка

Тест проверяет границу модулей C: что объявлять в заголовочном файле, где держать единственное определение, как работают защита от повторного включения и связывание, почему сообщения `undefined reference` и `multiple definition` требуют анализа объектных файлов, а не случайных правок исходника.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 4 темам.
Вопрос 1 из 20
Что должно находиться в header для публичной функции?
CC17
/* widget.h */
int widget_open(const char *path);
Вопрос 2 из 20
Где корректно определить глобальный объект `int counter`?
CC17
/* counter.h */ extern int counter;
/* counter.c */ int counter=0;
Вопрос 3 из 20
Почему файл реализации полезно начинать со своего заголовка?
Вопрос 4 из 20
Что такое tentative definition на уровне файла, например `int x;`?
CC17
/* file scope */
int x;
Вопрос 5 из 20
Как скрыть структуру реализации за непрозрачным типом?
Вопрос 6 из 20
Что предотвращает include guard?
CC17
#ifndef PROJECT_WIDGET_H
#define PROJECT_WIDGET_H
/* declarations */
#endif
Вопрос 7 из 20
Почему guard не стоит называть `_WIDGET_H`?
Вопрос 8 из 20
Должен ли публичный заголовок компилироваться при самостоятельном включении?
CC17
/* check_header.c */
#include "widget.h"
int main(void){return 0;}
Вопрос 9 из 20
Как уменьшить цикл включений между a.h и b.h, если нужны только указатели на структуры?
CC17
/* a.h */ struct B; struct A { struct B *b; };
Вопрос 10 из 20
Что можно сказать о `#pragma once`?
Вопрос 11 из 20
Что означает `static` у функции на уровне файла?
CC17
static int helper(int x){ return x+1; }
Вопрос 12 из 20
Что означает `extern int x;` без инициализатора?
Вопрос 13 из 20
Что произойдёт, если в заголовке написать `static int cache;` и включить его в три .c?
CC17
/* cache.h */ static int cache;
Вопрос 14 из 20
Как экспортировать только функцию API, скрыв вспомогательные?
Вопрос 15 из 20
Почему глобальный static-контекст может мешать библиотеке?
Вопрос 16 из 20
Что означает сообщение `undefined reference to foo` при связывании показанной команды?
CСообщение линковщика
$ cc main.o -o app
/usr/bin/ld: main.o: undefined reference to ‘foo’
Вопрос 17 из 20
Что означает `multiple definition of x`?
Вопрос 18 из 20
Какой инструмент показывает символы объектного файла?
CC17
nm -C module.o
Вопрос 19 из 20
Почему порядок статических библиотек в команде линковщика иногда важен?
Вопрос 20 из 20
Как отличить ошибку компиляции от линковки?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу