相关疑难解决方法(0)

201
推荐指数
6
解决办法
6万
查看次数

为什么在没有返回值的情况下流出非void函数的末尾不会产生编译器错误?

自从我多年前意识到这一点,默认情况下这不会产生错误(至少在GCC中),我一直想知道为什么?

我知道您可以发出编译器标志来产生警告,但是它不应该总是出错吗?为什么非void函数没有返回值才有效?

评论中要求的示例:

#include <stdio.h>
int stringSize()
{
}

int main()
{
    char cstring[5];
    printf( "the last char is: %c\n", cstring[stringSize()-1] ); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...编译.

c c++ gcc g++

157
推荐指数
5
解决办法
4万
查看次数

为什么这个C++函数返回一个值?

为什么这段代码打印出n-100?

    int hello(int n)
    {
        for(int i = 0; i < n-100; i++)
        {
        }
    }

    int main()
    {
            int h = hello(12);
        cout << hello(12) << " " << h << endl;
    }
Run Code Online (Sandbox Code Playgroud)

然而,这两个函数都返回垃圾(分别为2665092和0)

    int hello1(int n)
    {
          for(int i = 0; i < 12; i++);
    }


    int hello2(int n)
    {
         (n - 100);
    }
Run Code Online (Sandbox Code Playgroud)

我在cygwin环境中使用g ++编译了这段代码.

c++ for-loop function

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

标签 统计

c++ ×3

c ×1

c++-faq ×1

for-loop ×1

function ×1

g++ ×1

gcc ×1

undefined ×1

undefined-behavior ×1