相关疑难解决方法(0)

C函数定义为int但在正文中没有返回语句仍然编译

假设您有这样的C代码:

#include <stdio.h>

int main(){
    printf("Hello, world!\n");
    printf("%d\n", f());    
}

int f(){

}
Run Code Online (Sandbox Code Playgroud)

它用gcc编译好,输出(在我的系统上)是:

你好,世界!

14

但是......但是......这怎么可能?我认为C不会让你编译那样的东西因为f()没有返回整数的return语句.为什么允许这样做?它是C功能还是编译器遗漏,14来自何处?

c compilation

16
推荐指数
2
解决办法
8250
查看次数

C和C++函数没有return语句

在查看工作代码时,我发现了一些(看似)令人反感的代码,其中函数具有返回类型,但没有返回.我知道代码有效,但认为它只是编译器中的一个错误.

我编写了以下测试并使用我的编译器运行它(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;
}
Run Code Online (Sandbox Code Playgroud)

类似于我在工作中发现的代码,这默认返回函数中执行的最后一个表达式的结果.

我发现了这个问题,但对答案不满意.我知道-Wall -Werror可以避免这种行为,但为什么它是一个选项呢?为什么这仍然允许?

c c++ return

9
推荐指数
2
解决办法
9820
查看次数

返回声明总是必要的吗?

有什么区别:

#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;
}
Run Code Online (Sandbox Code Playgroud)

#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;
}
Run Code Online (Sandbox Code Playgroud)

因为两个编译没有错误(使用gcc)而且两个都正常工作.第一次回归真的很重要吗?

c return

2
推荐指数
1
解决办法
103
查看次数

参数传入C函数

我是新手.所以请耐心等待,

#include<stdio.h>

    int abc(int k)
    {
    k++;

    }
    int main()
    {
    int a=1;
    printf("%d",abc(a));

    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

以上程序的输出是:1

我的问题是输出不应该是'2',因为实际参数将'1'的值传递给形参,并且必须通过函数abc递增.

当我将函数调用更改为

printf("%d",abc(1));
Run Code Online (Sandbox Code Playgroud)

输出是一些垃圾值.

参数传递如何在这里工作?请解释.

c function parameter-passing

-1
推荐指数
1
解决办法
79
查看次数

我无法理解我的 C 程序中的逻辑

#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));
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个输出

The factorial of 0 is -1
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么我得到 -1 ???

我试着看一些关于这个的视频,但我没有得到答案

如果可能,请解释一下其中的逻辑?

谢谢

c

-1
推荐指数
1
解决办法
83
查看次数

标签 统计

c ×5

return ×2

c++ ×1

compilation ×1

function ×1

parameter-passing ×1