Мне интересно, удалит ли компилятор/компоновщик глобальные переменные, которые были extern
'd в общедоступном заголовке? Например:Удаление мертвого кода extern'd global
// public.h
struct func_ptrs {
void (*foo)(void);
void (*bar)(int);
};
extern const struct func_ptrs DEFAULT_FUNCS;
и:
// private.c
#include "public.h"
void def_foo(void) { ... }
void def_bar(int a) { ... }
const struct func_ptrs DEFAULT_FUNCS = { .foo = def_foo, .bar = def_bar };
Есть ли какие-либо конкретные флаги компоновщика, которые позволят этой переменной (и двух функций), чтобы быть отделенной от полученного двоичного файла?
Предположим, что GCC и MSVC являются двумя целевыми компиляторами.
Посмотрите здесь: http://stackoverflow.com/questions/6687630/how-to-remove-unused-cc-symbols-with-gcc-and-ld – nsilent22