我可以使用 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) y
和 file2.c
中的 function(z)
),那么不会,它赢了't.
我有点喜欢在没有 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) y
和 file2.c
中的 function(z)
),那么不会,它赢了't.