Могу ли я использовать #define представление функции stdlib? - PullRequest
1 голос
/ 07 января 2020

Мне понравилась идея иметь свою собственную функцию sprintf без bloatware string.h или stdio.h.

#define sprintf(x)   my_sprintf(x)

void my_sprintf(const char * string);

int main(void)
{
  sprintf("abc");
}

Это мои флаги LD:

LDFLAGS += -lgcc
LDFLAGS += --specs=nano.specs
LDFLAGS += -mthumb
LDFLAGS += -mcpu=cortex-m4
# LDFLAGS += --gc-sections
# LDFLAGS += -nostartfiles 
# LDFLAGS += -nodefaultlibs
# LDFLAGS += -gc-sections

Как вы видите, у меня отключены опции nostartfiles и nodefaultlibs. Таким образом, даже если бы у меня была идея включить string.h или stdio.h, компилятор мог бы найти определение / ссылку на функцию sprintf.

Так что я хотел бы знать, что если #define все равно будет ссылаться на «переопределение», если оно совпадает с именем существующей функции.

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 07 января 2020

Да, но более простым способом было бы использование автономной среды:

gcc -ffreestanding ...

Если вы хотите знать, повлияет ли ваш подход на файлы (например, #define function(x) y в file1.c и function(z) в file2.c), тогда нет, не будет.

...