主观题:G=mg - C/C++ 编译及构建*
**任务1: G=mg**
请读者录入内容如下的代码文件G.c,编译并运行。
c
#include <stdio.h>
float g = 9.8f; //重力常数
float getG(float m) {
float r = m*g;
return r;
}
int main() {
float m = 10.0f, G = 0.0f;
G = getG(m);
printf("G = mg = %.2fkg * %.2f N/kg = %.2fN.",m,g,G);
return 0;
}
终端编译命令:
linux> gcc G.c –o computeg
期望的运行结果:
G = mg = 10.00kg * 9.80 N/kg = 98.00N.
**任务2:外部对象**
将上述代码第3行修改为:
extern float g;
然后再次编译G.c,将遇到链接错误,请分析该错误,并推测extern关键字的用途。
**任务3:链接外部对象**
在G.c的同一目录新增代码文件constants.c,其内容如下:
float g = 9.8; //重力常数9.8 N/kg
然后使用下述终端命令进行编译:
linux> gcc G.c constants.c -o computeg
程序应可正常编译和运行。请读者思考G.c中的g变量与constants.c中的g变量的关系。
**任务4:可重定位目标文件里的重力常数**
请参考本章稍前使用的终端编译命令,将G.c以及constants.c分别编译成可重定位目标文件,再通过objdump观察G.o以及constants.o中的重力常数变量g。
请上传一个pdf格式文件:
1. 左上角包含你的学号及姓名;
2. 证明你完成上述各阶段任务的代码及截图(按顺序依次提供);
3. 你对各阶段提问的回答。
可以先在Word文档中填写,然后另存为PDF再提交。不接受除PDF以外的文件格式。
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)

答案:
请读者录入内容如下的代码文件G.c,编译并运行。
c
#include <stdio.h>
float g = 9.8f; //重力常数
float getG(float m) {
float r = m*g;
return r;
}
int main() {
float m = 10.0f, G = 0.0f;
G = getG(m);
printf("G = mg = %.2fkg * %.2f N/kg = %.2fN.",m,g,G);
return 0;
}
终端编译命令:
linux> gcc G.c –o computeg
期望的运行结果:
G = mg = 10.00kg * 9.80 N/kg = 98.00N.
**任务2:外部对象**
将上述代码第3行修改为:
extern float g;
然后再次编译G.c,将遇到链接错误,请分析该错误,并推测extern关键字的用途。
**任务3:链接外部对象**
在G.c的同一目录新增代码文件constants.c,其内容如下:
float g = 9.8; //重力常数9.8 N/kg
然后使用下述终端命令进行编译:
linux> gcc G.c constants.c -o computeg
程序应可正常编译和运行。请读者思考G.c中的g变量与constants.c中的g变量的关系。
**任务4:可重定位目标文件里的重力常数**
请参考本章稍前使用的终端编译命令,将G.c以及constants.c分别编译成可重定位目标文件,再通过objdump观察G.o以及constants.o中的重力常数变量g。
请上传一个pdf格式文件:
1. 左上角包含你的学号及姓名;
2. 证明你完成上述各阶段任务的代码及截图(按顺序依次提供);
3. 你对各阶段提问的回答。
可以先在Word文档中填写,然后另存为PDF再提交。不接受除PDF以外的文件格式。
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)

答案: