我有一个我创建的库,
mylib.c:
#include <mylib.h>
int
testlib() {
printf("Hello world\n");
return (0);
}
Run Code Online (Sandbox Code Playgroud)
mylib.h:
#include <stdio.h>
extern int testlib();
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我试图调用这个库函数:
myprogram.c:
#include <mylib.h>
int
main (int argc, char *argv[]) {
testlib();
return (0);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译该程序时,我收到以下错误:
In file included from myprogram.c:1 mylib.h:2 warning: function declaration isn't a prototype
我正在使用: gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)
我的问题是,声明函数原型的正确方法是什么?
我不明白为什么这段代码会编译?
#include <stdio.h>
void foo() {
printf("Hello\n");
}
int main() {
const char *str = "bar";
foo(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc甚至没有发出警告,我向foo()传递了太多的参数.这是预期的行为吗?
以下是什么意思:
int main(void) {...}
Run Code Online (Sandbox Code Playgroud)
VS
int main() {...}
Run Code Online (Sandbox Code Playgroud)
?
我认为这int main() {...}意味着main不接收任何参数(来自命令行),但是:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
确实.
但这int main(void) {...} 意味着什么?什么是无效主张?
我看过这里,但这是一个不同的问题.