【发布时间】:2016-09-09 11:59:43
【问题描述】:
我试图弄清楚为什么我的 c 编译器使用以下(简化的)代码没有给我警告/错误。
函数声明没有参数,而函数实现有参数:
some.h:
void foo();
some.c:
static uint32_t count = 0;
void foo(uint32_t num) {
count += num;
print("Count: %u");
}
main.c:
foo(100);
foo();
输出:
Count: 100
Count: 100
目标编译器:
gcc-arm-none-eabi-4_9-2015q1-20150306-win32
目标构建的链接器:
gcc-arm-none-eabi-4_9-2015q1-20150306-win32
编译器标志:
-Wall -Werror -DuECC_CURVE=uECC_secp256r1 -DMEMORY_CHECK -DDEBUG -Os -g3 -DBACKTRACE
【问题讨论】:
-
你的编译语句?包括?
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
请注意,这是 C 和 C++ 非常不同的另一种情况。改用 C 的 C++ 程序员往往会错误地写成
()而不是(void)。
标签: c gcc declaration