一:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行; 2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。
下面是主程序文件 main1.c 和子程序文件 sub1.c 的代码示例:
main1.c:
#include <stdio.h>
float x2x(int a, int b);
int main() {
int num1 = 10;
int num2 = 5;
float result = x2x(num1, num2);
printf("Result: %.2f\n", result);
return 0;
}
sub1.c:
float x2x(int a, int b) {
float result = (float)(a * a) / (float)(b * b);
return result;
}
在 Ubuntu 系统中使用 gcc 命令行方式编译和运行程序:
-
打开终端 (Terminal)。
-
进入保存有 main1.c 和 sub1.c 文件的目录。
-
执行以下命令来编译 main1.c 文件和 sub1.c 文件:
gcc -o main1 main1.c sub1.c
-
这将生成一个名为 main1 的可执行文件。
-
执行以下命令来运行编译生成的可执行文件:
./main1
结果将会在终端中显示。
经过编译并运行后的结果是:结果为: 15.000
二:在任务4基础上,在ubuntu系统下用Makefile方式编程主程序。
下面是在 Ubuntu 系统下使用 Makefile 编译主程序的示例:
Makefile 文件:
CC=gcc
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main1.c sub1.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=main1
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f $(EXECUTABLE) $(OBJECTS)
在终端中进入保存有 main1.c 和 sub1.c 和 Makefile 的目录,执行以下命令:
make
如果编译成功,将会生成一个名为 main1 的可执行文件。
如果需要清除已生成的文件,可以执行以下命令:
make clean
备注:
- 在 Makefile 中,使用
$<
表示当前目标依赖的源文件;使用$@
表示当前目标文件的名称。 $(SOURCES:.c=.o)
表示将$(SOURCES)
变量中所有以.c
结尾的文件名后缀都替换成.o
,然后作为目标文件的名称。这里将main1.c
和sub1.c
都编译成了对应的.o
目标文件,用于最后的链接操作。CFLAGS
存储了编译选项,这里使用了-c
选项将源文件编译成目标文件;使用了-Wall
选项开启所有警告信息。LDFLAGS
存储了链接选项,这里没有使用任何选项。all
是默认目标,其依赖于$(EXECUTABLE)
和$(SOURCES)
。clean
目标用于删除所有的目标文件和可执行文件,方便重新编译。