练习1-1:
在你自己的系统中运行“hello, world”程序。再有意去掉程序中的部分内容,看看会得到什么出错信息。
原程序
#include <stdio.h>
int main()
{
printf("Hello, world\n");
return 0;
}
1. 首先书里定义main函数都不写int,而现在的书和教程都会是“int main()”。所以想试试去掉int还能不能编译。
hello01.c:2:1: warning: return type defaults to 'int' [-Wimplicit-int]
main()
^~~~
Hello, world
结果是可以输出“Hello world”,也就是可以编译,但是会告警你没有指定类型声明。
2. 教程里也没有“return 0;”这一行代码,是不是因为当时C是在UNIX操作系统上运行的,后来C逐步发展,所以变成现在我们这样由int main()主函数开始执行,到以return 0;终止函数的?如果我们去掉return 0;会有什么信息?
去掉“return 0;”之后,居然正常输出了“Hello, world”,也没有报错信息。这是怎么回事呢?我到虚拟机上的Linux系统中运行,也是一样,可以编译,正常输出了“Hello, world”。先把问题放这里,可以思考思考。咱平时写代码还是要规规矩矩地按照结构规范来写,绝对不能省掉return 0。
3. 如果我们把代码第一行的“#include <stdio.h>”(包含标准库的信息)去掉,会得到什么结果呢?
hello03.c: In function 'main':
hello03.c:4:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
printf("Hello, world\n");
^~~~~~
hello03.c:4:5: warning: incompatible implicit declaration of built-in function 'printf'
hello03.c:4:5: note: include '<stdio.h>' or provide a declaration of 'printf'
Hello, world
可以输出“Hello,world”,但是出现一堆告警。就是讲,在函数main里面,告警没有声明就使用函数‘printf’;告警内置函数‘printf’声明互不兼容没有声明;注:include '<stdio.h>'或者提供'printf'的声明。
练习1-2:
做个实验,当printf函数的参数字符串中包含\c(其中c是上面的转义字符序列中未曾列出的某个字符)时,观察一下会出现什么情况。
我们就把原来的代码的\n换成\c,就出现了如下的信息。就是讲,在函数main里,告警出现未知的转义序列:'\c',把双引号里的内容用波浪线划出来了。不过程序还是输出了,反斜杠没有输出,c跟着Hello, world输出了。
hello04.c: In function 'main':
hello04.c:4:12: warning: unknown escape sequence: '\c'
printf("Hello, world\c");
^~~~~~~~~~~~~~~~
Hello, worldc
然后,我们再试一下把‘\n’换成'\7',会发生什么呢?我就不贴出结果了,正常输出"Hello, world",没有多余的字,而且正如习题解答里说的,ASCII的7字符是<BELL>,短蜂鸣。运行程序电脑确实发出了“铛”的声音。
好了,两题做完了,导言入门的章节前两题真的做起来还不简单呢。继续加油吧。
|