这个问题试图收集社区维护的关于c编程语言的优质书籍清单,目标是各种技能水平.
C是一种复杂的编程语言,通过阅读在线教程很难在旅途中学习.综合性书籍通常是学习语言的最佳方式,找到一本好书是第一步.重要的是要避免写得不好的书籍,更重要的是要避免包含严重技术错误的书籍.
请建议编辑接受的答案,以添加高质量的书籍,具有近似的技能水平和每本书的简短描述/描述.(请注意,问题已被锁定,因此不会接受新的答案.列表中会保留一个答案)
随意讨论书籍选择,质量,标题,摘要,技能水平以及您认为错误的任何其他内容.C社区认为令人满意的书籍将列在名单上; 其余的将定期删除.
对于由C和C++用户协会(ACCU)进行评论的书籍,应该与书籍一起添加指向这些评论的链接.
也可以看看:
这个问题在Meta上作为2018年删除问题审计的一部分进行了讨论.
达成共识的目的是保持其未被删除和积极维护.
What is the proper signature of the main function in C++? What is the correct return type, and what does it mean to return a value from main? What are the allowed parameter types, and what are their meanings?
这是系统特定的吗?这些规则会随着时间而改变吗?如果我违反它们会发生什么?
我只是在读书
ISO/IEC 9899:201x委员会草案 - 2011年4月12日
我在5.1.2.2.3程序终止下找到了
..reaching the } that terminates the main function returns a value of 0.
Run Code Online (Sandbox Code Playgroud)
这意味着如果你没有指定任何return语句main(),并且如果程序成功运行,那么在main的右括号中将返回0.
但是在下面的代码中我没有指定任何return语句,但它不返回0
#include<stdio.h>
int sum(int a,int b)
{
return (a + b);
}
int main()
{
int a=10;
int b=5;
int ans;
ans=sum(a,b);
printf("sum is %d",ans);
}
Run Code Online (Sandbox Code Playgroud)
编
gcc test.c
./a.out
sum is 15
echo $?
9 // here it should be 0 but it shows 9 why?
Run Code Online (Sandbox Code Playgroud) 我问,因为我的编译器似乎这么认为,即使我没有.
echo 'int main;' | cc -x c - -Wall
echo 'int main;' | c++ -x c++ - -Wall
Clang没有发出任何警告或错误,gcc只发出温和的警告:'main' is usually a function [-Wmain]但是只有在编译为C时才指定.指定a -std=似乎并不重要.
否则,它编译和链接很好.但在执行时,它立即终止SIGBUS(对我来说).
阅读(C)和C++中main()返回的(优秀)答案?和快速的grep通过语言规范,这肯定会似乎对我来说,一个主要的功能是必需的.但是gcc -Wmain('main' 通常是一个函数)的冗语(以及这里的错误缺失)似乎可能暗示其他情况.
但为什么?是否有一些奇怪的边缘案例或"历史"用途?谁知道什么给了?
我想,我的观点是,我认为这应该是托管环境中的错误,是吗?
这是一个简单的问题,但我一直看到相互矛盾的答案:C++程序的主程序应该返回0还是EXIT_SUCCESS?
#include <cstdlib>
int main(){return EXIT_SUCCESS;}
Run Code Online (Sandbox Code Playgroud)
要么
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)
它们是完全相同的吗?应该EXIT_SUCCESS只与exit()?一起使用?
我认为EXIT_SUCCESS这是一个更好的选择,因为其他软件可能想要将零视为失败,但我也听说如果你返回0,编译器无论如何都能够将它改为不同的值.
每个程序都从main(int argc, char *argv[])定义开始.
我不明白这意味着什么.如果我们在程序中不使用这些参数,有人可以解释为什么我们会使用这些参数,我会很高兴的吗?为什么不int main()呢:?
程序的名称是其中的一个元素,*argv[]并且argc是参数个数的计数*argv[]?发送到的其他参数是*argv[]什么?我们如何发送它们?
我正在尝试编译并运行以下程序而没有main()函数C.我使用以下命令编译了我的程序.
gcc -nostartfiles nomain.c
Run Code Online (Sandbox Code Playgroud)
编译器发出警告
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
Run Code Online (Sandbox Code Playgroud)
好的,没问题.然后,我已经运行了可执行文件(a.out),两个printf语句都成功打印,然后得到分段错误.
那么,我的问题是,为什么在成功执行print语句后出现分段错误?
我的代码:
#include <stdio.h>
void nomain()
{
printf("Hello World...\n");
printf("Successfully run without main...\n");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Hello World...
Successfully run without main...
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
注意:
这里,-nostartfilesgcc标志阻止编译器在链接时使用标准启动文件
在C程序中,如果我们想从终端提供一些输入,那么我们可以通过以下方式给出:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
同样,如果我们想获得main()函数的返回值,那么我们如何才能得到它?
在每个main()我们写return 1或return 0; 我怎么知道我main()在码头回来了什么?
编辑:1
我得到它,因为echo $?我们可以获得返回值,main()但它只允许我成功返回小于125(在Linux中)的值.不止于此返回值不能被成功地接收到$ variable这样
为什么int回归类型main()?为什么不保留它short int?
EDIT2
如果main()返回大于125的值,我在哪里可以找到错误代码的含义?
在阅读有关C ++中的函数的知识时,我被告知函数需要调用声明。例如:
#include <iostream>
int main() {
std::cout << "The result is " << sum(1, 2);
return 0;
}
int sum(int x, int y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
由于该函数没有声明,因此返回错误sum。
main.cpp:4:36: error: use of undeclared identifier 'sum'
std::cout << "The result is " << sum(1, 2);
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我将添加声明:
#include <iostream>
int sum(int x, int y); // declaration
int main() {
std::cout << "The result is " << sum(1, 2);
return 0;
}
int sum(int …Run Code Online (Sandbox Code Playgroud) c++ program-entry-point forward-declaration function-declaration
对于具有类似C语法的语言,我们声明main()方法返回int或float值(或void).是否可以在Java中从main()声明非void返回类型?如果没有,那么为什么不呢?这是否意味着Java程序不会向操作系统返回任何值?
c ×7
c++ ×4
gcc ×2
linux ×2
argc ×1
argv ×1
c++-faq ×1
entry-point ×1
function ×1
gcc-warning ×1
java ×1
return ×1
return-value ×1