我是C的新手(我之前有Java,C#和一些C++经验).在C中,是否有必要声明一个函数原型,或者代码可以在没有它的情况下编译?这样做是很好的编程习惯吗?或者它只是依赖于编译器?(我正在运行Ubuntu 9.10并在Code :: Blocks IDE下使用GNU C编译器或gcc)
术语"函数的隐式声明"是什么意思.调用标准库函数而不包括相应的头文件会产生警告,如果的话
int main(){
printf("How is this not an error?");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果不声明它是错误的话,不应该使用函数吗?请详细解释.我搜索了这个网站,发现了类似的问题,但找不到明确的答案.大多数答案说了一些关于包含头文件以摆脱警告的事情.但我想知道这不是一个错误.
我注意到C++在使用它们之前声明函数签名比C更具限制性,即使函数定义是在实际调用函数之后声明的吗?
我一直认为C更具限制性,但似乎并非如此.
为什么在制定C++编程语言标准时改变了理念?
例如,以下代码运行时编译精细gcc命令,但在尝试编译时输出错误g++
#include<stdio.h>
int main()
{
int a=sum(4,6);
printf("%d",a);
return 0;
}
int sum(int a,int b)
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
错误是
‘sum’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud) 我习惯了旧式C和最近才开始探索c99功能.我只有一个问题:如果我在我的程序中使用c99,c99标志gcc并将其与之前的c99库链接,我的程序是否会成功编译?
那么,我应该坚持旧的C89还是进化?
我正在按照指南学习curses,以及之前原型函数中的所有C代码main(),然后定义它们.在我的C++学习中,我听说过函数原型,但从未完成它,据我所知,它对代码的编译方式没有太大区别.这是程序员的个人选择吗?如果是这样,为什么它包含在C中呢?
在C++中,在声明函数之前调用函数是一个编译器错误.但在C语言中,它可能会编译.
#include<stdio.h>
int main()
{
foo(); // foo() is called before its declaration/definition
}
int foo()
{
printf("Hello");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过并且知道它是正确的,但我无法理解它背后的原因.任何人都可以解释编译过程是如何实际发生的,并且两种语言都有所不同.
我正在尝试为嵌入式系统学习C语言。目前,我正在学习基础知识,但找不到一个基本问题的答案。当我编写一个简单的C程序时,我以三种方式声明了一个名为maximum()的函数。我将通过以下示例对其进行解释:
1-)在下面的程序中,该函数在main之外和main之前声明:
#include <stdio.h>
int maximum(int x, int y)
{
int z;
z = (x >= y) ? x : y;
return z;
}
int main(void)
{
int result = maximum(30, 50);
printf("%d", result);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
2-)现在,在主函数的外部和之后声明该函数的下面:
#include <stdio.h>
int main(void)
{
int result = maximum(30, 50);
printf("%d", result);
return(0);
}
int maximum(int x, int y)
{
int z;
z = (x >= y) ? x : y;
return z;
}
Run Code Online (Sandbox Code Playgroud)
3-)最后,在主函数内部声明以下函数:
#include <stdio.h>
int main(void)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个file1.c调用函数的C文件(比方说)
fun1(1,b).
这个函数fun1(int a,int b)驻留在另一个C文件中(比方说file2.c),但它的原型不包含在头文件中(比方说file2.h).
file2.h包括在内file1.c.
我的问题是,如果我打电话fun1(a,b)来file1.c,它会通过将控制传递给函数定义file2.c吗?或者是否会发生异常或预期的行为是什么?
我一定要给出一个原型fun1(int a, int b)在file2.h这个工作?
我知道有两种类型的函数:void和返回某些函数的函数(int,double等).但是如果在没有任何return语句的情况下声明函数怎么办?它被认为是一种void功能吗?例如,
myFunction(int value){
.......
}
Run Code Online (Sandbox Code Playgroud)