1.1编写一个简单的C++程序
程序员文章站
2022-06-04 08:45:30
...
1.1编写一个简单的C++程序
int类型是一种内置类型(built-in type),即语言自身定义的类型。同时int也是C++的一个关键字。
语句块(block of statements):以左花括号开始,以右花括号结束。
当return语句包括一个值时,此返回值的类型必须与函数的返回类型相容。在本例中,main的返回类型是int,而返回值0的确是一个int类型的值。
测试1:
int main()
{
return 3.14;
}
测试结果:
[email protected]:~/cpp/ch1/1$ g++ prog1.cpp -o prog1 -Wall
[email protected]:~/cpp/ch1/1$ ./prog1
[email protected]:~/cpp/ch1/1$ echo $?
3
测试2:
int main()
{
return 'a';
}
测试结果:
[email protected]:~/cpp/ch1/1$ !g++
g++ prog1.cpp -o prog1 -Wall
[email protected]:~/cpp/ch1/1$ !./
./prog1
[email protected]:~/cpp/ch1/1$ !e
echo $?
97
测试3:
int main()
{
return "hello";
}
测试结果:
[email protected]:~/cpp/ch1/1$ !g
g++ prog1.cpp -o prog1 -Wall
prog1.cpp: In function ‘int main()’:
prog1.cpp:3:9: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
return "hello";
^
测试4:
int main()
{
struct stu {
int no, score;
} stu_a;
return stu_a;
}
测试结果:
[email protected]:~/cpp/ch1/1$ !g
g++ prog1.cpp -o prog1 -Wall
prog1.cpp: In function ‘int main()’:
prog1.cpp:7:9: error: cannot convert ‘main()::stu’ to ‘int’ in return
return stu_a;
^
通过上诉4个例子不难感性地理解函数返回时,需要将return的数据类型转换为函数的返回类型。测试中float和char都跟int相容,且返回的是3.14转换为int后的值3和‘a’的ASCII码值97。但是,指针和复合数据类型与int不相容。
测试5:
int main()
{
return 1024;
}
测试结果:
[email protected]:~/cpp/ch1/1$ !v
vi prog1.cpp
[email protected]:~/cpp/ch1/1$ !g
g++ prog1.cpp -o prog1 -Wall
[email protected]:~/cpp/ch1/1$ !./
./prog1
[email protected]:~/cpp/ch1/1$ !e
echo $?
0
查看汇编代码:
[email protected]:~/cpp/ch1/1$ g++ prog1.cpp -S
[email protected]:~/cpp/ch1/1$ vi prog1.s
汇编代码如下:
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $1024, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
将1024修改为1023,重新编译有:
[email protected]:~/cpp/ch1/1$ g++ prog1.s -o prog1
[email protected]:~/cpp/ch1/1$ !./
./prog1
[email protected]:~/cpp/ch1/1$ !e
echo $?
255
将1023修改为-1,重新编译有:
[email protected]:~/cpp/ch1/1$ !g
g++ prog1.s -o prog1
[email protected]:~/cpp/ch1/1$ !./
./prog1
[email protected]:~/cpp/ch1/1$ !e
echo $?
255
同理根据补码规则,将-1修改为-255,不难可知,返回值应为1:
[email protected]:~/cpp/ch1/1$ !g
g++ prog1.s -o prog1
[email protected]:~/cpp/ch1/1$ !./
./prog1
[email protected]:~/cpp/ch1/1$ !e
echo $?
1
由上述的实验可以得出结论,在当前环境下,系统以无符号数的方式处理eax寄存器的低8位(即al)。
在一些系统中,即使文件就在当前目录或文件夹中,你也必须显式指出文件的位置。这个跟当前shell进程的环境变量相关。
练习1.1
略。
练习1.2
参考上述测试5后扩展的实验及其结论。
上一篇: 【数据库】MySQL 表的操作
下一篇: 数据库进阶