У меня есть этот код
#include <stdio.h>
void test2()
{
printf("start test2\n");
printf("end test2\n");
}
void main ()
{
printf("abc\n");
#ifdef A
test2();
#endif
}
, скомпилируйте его с gcc test.c -o test -static -D B
, когда я запускаю программу, я вижу, что test2
не запускается (это хорошо)
Но когда я запускаю строки, я вижу это end test2
в двоичном файле. Почему? g cc не нужно было его компилировать!
Когда я компилирую этот код
#include <stdio.h>
void test1();
void test2()
{
printf("start test2\n");
test1();
printf("end test2\n");
}
void main ()
{
printf("abc\n");
#ifdef A
test2();
#endif
}
с gcc test.c -o test -static -D B
G cc, скажите мне, что undefined reference to 'test1'
почему? Я не хотел, чтобы g cc даже выполнял функцию компиляции test2
, поэтому g cc не нужно было знать, что я использовал эту неопределенную функцию.
Что я могу сделать, чтобы g cc не смотреть на test2
, когда я прохожу -D
, что не равно A
?