相关疑难解决方法(0)

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

如何禁用几行代码的GCC警告

在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?

c gcc pragma compiler-warnings

200
推荐指数
8
解决办法
12万
查看次数

为什么这个C++片段编译(非void函数不返回值)

今天早上我在我的一个图书馆找到了这个:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}
Run Code Online (Sandbox Code Playgroud)

我期望编译器错误,因为此方法不返回任何内容,并且返回类型不返回void.

想到的唯一两件事是

  • 在调用此方法的唯一位置,不使用或存储返回值.(此方法应该是void- tvec4返回类型是复制和粘贴错误)

  • tvec4正在创建一个默认构造,这看起来有点不同,哦,C++中的其他所有东西.

我还没有找到解决这个问题的C++规范部分.参考文献(ha)表示赞赏.

更新

某些情况下,这会在VS2012中生成错误.我没有缩小具体细节,但它仍然很有趣.

c++ methods c++11 visual-studio-2012

128
推荐指数
5
解决办法
1万
查看次数

禁用单个警告错误

有没有办法用visual studio禁用cpp文件中的单个警告线?

例如,如果我捕获异常并且不处理它,则会收到错误4101(未引用的局部变量).有没有办法在该函数中忽略它,否则在编译单元中报告它?此刻,我放在#pragma warning (disable : 4101)文件的顶部,但显然只是将它关闭整个单元.

c++ warnings pragma visual-c++

102
推荐指数
9
解决办法
12万
查看次数

如果函数没有返回值,并且返回类型有效,编译器是否可以抛出垃圾?

如果函数的返回类型不是void,并且函数没有返回任何内容,那么我猜编译器会返回一个垃圾值(可能被视为未初始化的值).它发生在编译时,为什么不应该抛出错误呢?

例如,

int func1() {
    return; // error
}

int func2() {
    // does not return anything
}
Run Code Online (Sandbox Code Playgroud)

第二个func2应该抛出错误,但事实并非如此.有原因吗?我的想法是,它可以看作是一个未初始化的值,所以如果我们需要在第二种情况下抛出错误,那么我们需要抛出错误,如果一个值是未初始化的,比如说

  int i;  // error
  int i = 6;  // okay
Run Code Online (Sandbox Code Playgroud)

有什么想法,或者这是一个重复的问题?我感谢您的帮助.

c c++ initialization return-value garbage

14
推荐指数
3
解决办法
7056
查看次数

具有缺失返回值的函数,运行时的行为

正如所料,编译器(VisualStudio 2008)将发出警告

警告C4715:'doSomethingWith':并非所有控制路径都返回一个值

编译以下代码时:

int doSomethingWith(int value)
{
    int returnValue = 3;
    bool condition = false;

    if(condition)
        // returnValue += value; // DOH

    return returnValue;
}

int main(int argc, char* argv[])
{
    int foo = 10;
    int result = doSomethingWith(foo);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但程序运行得很好.函数doSomethingWith()的返回值为0.

是仅仅是未定义的行为,还是存在一定的规则如何在运行时创建/计算结果值.非POD数据类型作为返回值会发生什么?

c++

12
推荐指数
2
解决办法
3112
查看次数

不带“返回”命令返回

C语言,gcc编译,WSL终端bash

我编写了一个递归函数,用于查找数组中的最小数,效果很好。

/*01*/    int minimo(int array[], int n)
/*02*/    {
/*03*/      static int min = 0;
/*04*/    
/*05*/      if (n == N)
/*06*/      {
/*07*/          return array[n-1];
/*08*/      }
/*09*/      else
/*10*/      {
/*11*/          min = minimo(array, n+1);
/*12*/          if(array[n]<min){
/*13*/              min = array[n];
/*14*/          }
/*15*/      }
/*16*/    }
Run Code Online (Sandbox Code Playgroud)

唯一的问题是它不应该工作,因为它不会将“min”返回给调用者......

int main()
{
    //Var
    int array[N] = {10, 2, 5, 1, 7};
    printf("Min: %d\n", minimo(array, 0));
}
Run Code Online (Sandbox Code Playgroud)

我的担忧实际上是一个问题,但不是在我的机器上,该功能可以正常工作;这是我朋友的笔记本电脑和 IDE 上的一个问题,我尝试在朋友的 Macbook 上复制到 XCode,但如果“return min;”这一行就无法工作。未在函数末尾添加。

在第 15-16 行之间,我必须添加 …

c recursion gcc return windows-subsystem-for-linux

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

为什么在c中使用returntype的函数与return语句一起工作?

可能重复:
为什么可以从非void函数返回而不返回值而不产生编译器错误?

void main()
{
    int y=0;
    clrscr();
    printf("%d\n",Testing());
    y=Testing();
    printf("%d",y);
    getch();
}
int  Testing()
{
    int x=100;
    //return x;
}

Result 
512
4
Run Code Online (Sandbox Code Playgroud)

我没有从测试功能返回任何东西还有价值吗?

另一个问题也是

void main()
{
    char Testing();
    int y=0;
    clrscr();
    printf("%d\n",Testing());
    if(Testing())
        printf("if--exi");
    else
        printf("else--exi");
    getch();
}
char Testing()
{
    char y;
    //return y;
}

Result

0
if--exi
Run Code Online (Sandbox Code Playgroud)

如果printf被评论,那么结果是

else--exi
Run Code Online (Sandbox Code Playgroud)

为什么会这样发生

c

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

C++布尔函数返回56

我有一个返回bool的函数:

bool restart()
{
    std::string answer;
    bool answered = false;
    while(answered == false)
    {
        cout << endl << endl << "Do you want to play again? y/n : ";
        cin >> answer;
        if(answer == "y" || answer == "Y" || answer == "1" || answer == "yes")
        {return true;}
        if(answer == "n" || answer == "N" || answer == "0" || answer == "no")
        {return false;}
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用它来调用它时:

cout << restart();
Run Code Online (Sandbox Code Playgroud)

我得到输出:

Do you want to play again? y/n …
Run Code Online (Sandbox Code Playgroud)

c++

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

使用gcc返回NULL时没有警告

使用gcc5.2.0,我注意到这段代码没有生成警告:

#include <stddef.h>

int function(void)
{
    return NULL;
}

void procedure(void)
{
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

我使用了旗帜-Wall -Wextra -std=c99 -pedantic,我正在运行archlinux.我不确定为什么这段代码可以正常工作gcc,特别是因为clang3.7.0会产生警告.

我也尝试使用gcc类似4.9或4.7的旧版本,它们都会产生警告.

警告是:

warning: return makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

warning: ‘return’ with a value, in function returning void
Run Code Online (Sandbox Code Playgroud)

我应该提一下,我尝试在Debian上编译gcc 5.2,结果是一样的.所以archlinux似乎不是问题所在.

理由是什么?我似乎无法在其他任何地方找到与此相关的任何内容.

谢谢!

c null gcc warnings gcc5.2

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