假设您有这样的C代码:
#include <stdio.h>
int main(){
    printf("Hello, world!\n");
    printf("%d\n", f());    
}
int f(){
}
它用gcc编译好,输出(在我的系统上)是:
你好,世界!
14
但是......但是......这怎么可能?我认为C不会让你编译那样的东西因为f()没有返回整数的return语句.为什么允许这样做?它是C功能还是编译器遗漏,14来自何处?
在查看工作代码时,我发现了一些(看似)令人反感的代码,其中函数具有返回类型,但没有返回.我知道代码有效,但认为它只是编译器中的一个错误.
我编写了以下测试并使用我的编译器运行它(gcc(Homebrew gcc 5.2.0)5.2.0)
#include <stdio.h>
int f(int a, int b) {
  int c = a + b;
}
int main() {
   int x = 5, y = 6;
   printf("f(%d,%d) is %d\n", x, y, f(x,y)); // f(5,6) is 11
   return 0;
}
类似于我在工作中发现的代码,这默认返回函数中执行的最后一个表达式的结果.
我发现了这个问题,但对答案不满意.我知道-Wall -Werror可以避免这种行为,但为什么它是一个选项呢?为什么这仍然允许?
有什么区别:
#include <stdio.h>
int f(int x){
    return x*x - 3;
}
int main(){
    int x = 4;
    printf("f(%d) = %d\n", x, f(x));
    return 0;
}
和
#include <stdio.h>
int f(int x){
    x*x - 3;
}
int main(){
    int x = 4;
    printf("f(%d) = %d\n", x, f(x));
    return 0;
}
因为两个编译没有错误(使用gcc)而且两个都正常工作.第一次回归真的很重要吗?
我是新手.所以请耐心等待,
#include<stdio.h>
    int abc(int k)
    {
    k++;
    }
    int main()
    {
    int a=1;
    printf("%d",abc(a));
    return 0;
    }
以上程序的输出是:1
我的问题是输出不应该是'2',因为实际参数将'1'的值传递给形参,并且必须通过函数abc递增.
当我将函数调用更改为
printf("%d",abc(1));
输出是一些垃圾值.
参数传递如何在这里工作?请解释.
#include <stdio.h>
int factorial(int value){
    if(value == 0){
        value * factorial(value - 1);
    }
}
int main()
{
    int value = 0;
    printf("The factorial of %d of %d",value, factorial(value));
}
我得到了一个输出
The factorial of 0 is -1
谁能解释为什么我得到 -1 ???
我试着看一些关于这个的视频,但我没有得到答案
如果可能,请解释一下其中的逻辑?
谢谢