重拾c——gcc编译器、c语言注意点

 

由于本人该学期开设的高性能计算实验课程主要使用c/c++编程,于是今天重新写了c,可以说非常难受了(中了FORTRAN95de 毒),说一下今天的问题:

a.为了重新熟悉c,写了个串行的矩阵乘法(两个矩阵乘法,矩阵无特殊性,暴力乘);

b.main.cpp matrix_multi.h matrix_multi.c三个文件:测试main,函数实现在matrix_multi.c


1)gcc编译的问题

gcc编译器的流程:

第一步,编译器对.c文件进行预处理:检查#include中<>和“”的文件位置,编译器首先去c库中寻找,然后在当前目录中寻找;

生成的预处理文件main.i(可以用vim查看,里面列出了库函数的调用路径)

gcc -E main.c -o main.i

第二步,编译器对.i文件进行词法分析(编译原理),检查语法错误,编译生成汇编语言的代码文件main.s;

gcc -S main.i -o main.s

第三步,编译器将汇编代码转为二进制代码文件main.o;

gcc -c main.s -o main.o

第四步,链接器将二进制文件转为可执行文件main(静态链接库),为静态变量分配实际的系统内存。

gcc main.o -o main

一步到位:

gcc main.c -o main

编译多个文件:

matrix_multi.c中实现了矩阵乘法的函数,matrix_multi.h声明其函数名。

编译时,无需编译matrix_multi.h文件(gcc预处理阶段会直接在当前目录寻找):

gcc main.c matrix_multi.c -o main

2)define宏防止头文件重复:防止.h文件被重复引用(导致函数、变量重命名)

#ifndef _MATRIX_MULTI.H
#define _MATRIX_MULTI.H

//code: variable and function declaration

#endif

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值