我可以使用 stdlib 函数的 #define 表示吗?

Can I use a #define representation of a stdlib function?

我有点喜欢在没有 string.h 或 stdio.h 英国媒体报道软件的情况下拥有自己的 sprintf 函数的想法。

#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 函数的 definition/reference。

所以我想知道如果#define 仍然引用 "redefinition" 如果它与现有函数名称相同怎么办。

热烈欢迎任何帮助。

是的,但更简单的方法是使用独立环境:

gcc -ffreestanding ...

如果您想知道您的方法是否会跨文件生效(即 file1.c 中的 #define function(x) yfile2.c 中的 function(z)),那么不会,它赢了't.