C C  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Компилятор, Make и линковщик

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 6 темам.
Вопрос 1 из 30
Что дают флаги `-std=c17 -pedantic`?
CC17
cc -std=c17 -Wall -Wextra -pedantic file.c
Вопрос 2 из 30
Почему `-Werror` стоит включать как осознанную политику проверочной сборки, а не как универсальное лекарство?
Вопрос 3 из 30
Какой набор параметров GCC или Clang лучше всего подходит для первого расследования обращения после освобождения памяти?
CC17
#include <stdlib.h>

int main(void) {
    int *p = malloc(sizeof *p);
    free(p);
    return *p; /* требуется диагностическая сборка */
}
Вопрос 4 из 30
Почему сбой только при `-O2` ещё не доказывает ошибку оптимизатора?
Вопрос 5 из 30
Зачем фиксировать точную команду компиляции в отчёте о дефекте?
CДанные для отчёта
cc --version
cc -v -std=c17 -O2 -DNDEBUG ...
Вопрос 6 из 30
Почему определение переменной в заголовке приводит к `multiple definition`?
CC17
/* bad.h */
int counter=0;
Вопрос 7 из 30
Что показывает `U parse_config` в выводе nm для main.o?
CВывод nm
nm main.o | grep parse_config
                 U parse_config
Вопрос 8 из 30
Почему несовпадающие прототипы в разных `.c`-файлах опасны, даже если линковщик нашёл одно имя?
CC17
/* a.c */ long f(long);
/* b.c */ int f(int x){ return x; }
Вопрос 9 из 30
Как изменится видимость функции `parse_line` из-за `static` на уровне файла?
CC17
static int parse_line(const char *s){...}
Вопрос 10 из 30
Зачем объектному файлу записи перемещений?
Вопрос 11 из 30
Почему изменение `header.h` не приводит к пересборке `main.o` в этом правиле?
CC17
main.o: main.c
	$(CC) -c main.c -o main.o
Вопрос 12 из 30
Что обозначают `$@` и `$<` в обычном шаблонном правиле?
CC17
%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
Вопрос 13 из 30
Почему рецепт с `cd build` на одной строке и `cmake ..` на следующей может не работать как ожидается?
CC17
configure:
	cd build
	cmake ..
Вопрос 14 из 30
Какой дефект зависимости может проявиться только при `make -j`?
CC17
app: main.o generated.h

main.o: main.c
	$(CC) -c main.c -o main.o

# main.c включает generated.h
Вопрос 15 из 30
Зачем объявлять `clean` как `.PHONY`?
CC17
.PHONY: clean
clean:
	rm -f app *.o
Вопрос 16 из 30
Почему порядок `main.o -lmath` может работать, а `-lmath main.o` — нет?
CC17
cc main.o -L. -lmath -o app
Вопрос 17 из 30
Что делает `ar rcs libutil.a parse.o io.o`?
CC17
ar rcs libutil.a parse.o io.o
Вопрос 18 из 30
Почему открытая структура в публичном заголовке усложняет совместимость ABI?
CC17
/* public_api.h */
typedef struct context {
    int state;
    size_t capacity;
    void *data;
} context;
Вопрос 19 из 30
Что произойдёт, если в архиве нет объекта с требуемым `parse`?
Вопрос 20 из 30
Почему внутренние символы библиотеки полезно скрывать?
Вопрос 21 из 30
Как увидеть результат раскрытия макросов перед компиляцией?
CC17
cc -E -dD source.c > source.i
Вопрос 22 из 30
Что делает команда `make -n app`?
CC17
make -n app
Вопрос 23 из 30
Зачем в Makefile используют флаги `-MMD -MP`?
CC17
CFLAGS += -MMD -MP
-include $(OBJ:.o=.d)
Вопрос 24 из 30
Как карта компоновки линковщика помогает при неожиданно большом бинарнике?
CC17
cc ... -Wl,-Map,app.map -o app
Вопрос 25 из 30
Сборка подхватывает неожиданную копию `config.h`. Какой набор действий точнее всего покажет фактический путь заголовка?
CC17
cc -Ivendor/include -Iinclude -c main.c
Вопрос 26 из 30
Почему `make NAME="$(user_input)"` опасно при подстановке в рецепт?
CC17
package:
	tar -czf $(NAME).tgz build/
Вопрос 27 из 30
Что означает `-Wl,-z,relro,-z,now` на поддерживающей ELF-платформе?
CC17
cc app.o -Wl,-z,relro,-z,now -o app
Вопрос 28 из 30
Почему относительный rpath вроде `.` опасен?
Вопрос 29 из 30
Как подтвердить, что защитные свойства действительно появились в итоговом бинарнике?
CПроверка ELF
$(CC) $(CFLAGS) main.o -o app $(LDFLAGS)
# Нужно проверить свойства именно файла app.
Вопрос 30 из 30
Почему генератор кода из зависимости нужно считать исполняемым риском цепочки поставки?

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

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

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

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