请问下:哪家电源电源适配器生产厂家家,技术比较领先?

1645人阅读
Ubuntu(4)
CSAPP(4)
一& 文件准备
&&&&& 因为正好要做作业,所以用vim写了如下两个文件:(是一个处理字符串的程序,不要在意,和gcc解释没什么关系。)放在~/Downloads
&&&&& 1. reverse.h&&&&&&&&&
#include&stdio.h&
#include&string.h&
void reverse(char *str);
&&&&& 2. reverse.c
#include&reverse.h&
void reverse(char *str)
len=strlen(str);
for(i=0;i&len/2;i++)
*(str+i)=*str+len-i-1;
*(str+len-i-1)=c;
int main()
char str[1024];
printf(&Give me a word to reverse:\n&);
scanf(&%s&,str);
reverse(str);
printf(&REVERSED: %s\n&,str);
}&&&&&&& 文件如下:
二& 一步式gcc编译C文件
&&&&&&& 在终端输入如下命令:
gcc reverse.c -o reverse -I ./
&&&&&&& 可以看到文件夹里出现了一个reverse可执行文件,如图:
&&&&&&& 在终端输入如下命令:
./reverse&&&&&& &运行结果如图:
&&&&&&& 如上 -o选项就是链接,后面加上生成的可执行文件的名字,不输入默认为 a.out 。所有步骤都隐式被悄悄搞定了,生成的文件用完都删掉了。-I 选项后面加上 reverse.h 的路径,即告诉编译器在这个目录下找头文件,因为在 reverse.c 中用到了 reverse.h 。如果它们在同一个目录下是可以省略的。
&&&&&&& 也可以用如下形式一步搞定,终端输入:
rm reverse /*删掉刚才生成的可执行文件,此时终端已经进入Downloads*/
gcc reverse.c -o reverse.o
./reverse.o&&&&&&& 文件列表如下:
&&&&&&& 多了一个reverse.o。.o文件是目标文件类型,可以直接运行,因为已经完成了所有步骤,只是跟上一个的名字不一样而已就类似a.out。(注意此时没有-c选项,也可以把-o后面直接加reverse生成菱形的可执行文件) 如果在reverse.o属性栏中把名称改成 reverse.out 就会变成 reverse 的类型,即可执行文件。如图:
三& 分步详细解析
&&&&&&& gcc编译C文件一共四步,预处理(Preprocess),编译(Compilation),汇编(Assembly)和链接(Linking)
&&& 1. 预处理(Preprocess)
&&&&&&&&&&& 预处理是预处理中会展开以#起始的行,包括#if、#ifdef、#if ndef、 #else 、 #elif 、 # endif、#define、#include、#line、 #error、#pragma以及单独的#。其实就是把除了函数(包括main)以外的东西都展开成指定的形式,比如加上行号等,并将头文件里包含的东西所对应的文件(包括子文件夹)也都写入进去以便调用。同时也会把写在文件里的注释都删掉。
&&&&&&&&&&& 在终端输入:
//rm reverse.out
删除刚才生成的reverse.out
gcc -E reverse.c -o reverse.i& & & & & & 可以看到生成一个名字为reverse.i的文件。
&&&&&&&&&&& 通过vim可以看到一共是1136行,多加了上千行,都是预处理做的事情。
&&&&&&&&&&& -E是仅激活预处理程序,将生成的信息放入reverse.i。如果不写 -o reverse.i 就会生成到终端显示。相当于重定向。
&&& 2. 编译(compilation)
&&&&&&& 编译的作用就是把预处理完的文件进行一系列语法分析及优化后生成相应的汇编文件。
&&&&&&& 终端输入:
gcc -S reverse.i -o reverse.s&&&&&&& 运行完后会生成一个 reverse.s 文件:
&&&&&&& 用vim打开后可以看到一共变成了129行,并且没有了源文件的内容,变成了一条条汇编指令。
&&&<span style="color:#. 汇编(Assembly)
&&&&&&& 汇编就是把生成的汇编指令逐条翻译成机器可以识别的形式,即机器码,这一步会产生平台相关性,即决定了在哪种平台下运行。
&&&&&&& 在终端输入:
gcc -c reverse.s -o reverse.o&&&&&&& 可以看到又生成了一个文件reverse.o。
& & & &&是不是很熟悉,刚才第二种一步式就是生成它就可以直接运行了,现在就不行了!此时生成的文件为可重定位文件,还需要经过最后一步分链接才能变成可执行文件!此时用了但还有最后一步才能生成可执行文件,reverse.o打开之后是乱码,改成十六进制之后虽然能看清楚是什么数字,但毕竟是二进制,还要进行翻译才能形成汇编指令。可以用vim进行转换。在vim的命令行模式(进入后按Esc后按:进入命令行模式),输入:
vim -b filename //文件名,注意替换
//进入命令行后:
:%!xxd //要再输入一个:,一共两个:!&&&&&&& 如图所示:仅仅比汇编指令多了13行(包括过滤掉了6行)
&&& 4. 链接(Linking)
&&&&&&& 这是最后一步,将生成的目标文件和其所依赖的库文件进行连接,生成一个可执行文件。链接的细节方面可以参考CSAPP的第七章,很详细,包括可执行目标文件和重定位目标文件的区别等。
&&&&&&& 终端输入:
gcc reverse.o -o reverse
&&&&&&& 可以看到reverse可执行文件(菱形)就出来了,通过第二行命令就可以运行了。
&&&&&&& 运行结果与上面一步式相同,就不再列举了。到此就是整个gcc搞定C文件的全部步骤了。接下来就是gdb的调试了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12934次
排名:千里之外
(1)(1)(1)(6)2011人阅读
ubuntu学习(7)
安装的ubuntu其实是自带GCC的,但由于缺少一些必要的头文件,所以,不能直接编译c程序,需要安装软件包build-essential
安装软件包buildessential时,会自动安装g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等一些必须的软件和头文件
安装软件包build-essential的方法如下:
sudo apt-get install build-essential
这里注意到:build-essential是一个软件包,所以可以用工具apt-get安装
什么是编译(complie)?
(1)编程语言(programming language)分为低级语言(Low-level Language)和高级语言(HIgh-level Language)
(2)机器语言(完全由十六进制数字组成)和汇编语言(将机器语言中的一组组数字用助字符代替)属于低级语言
(3)C语言属于高级高级语言(Java/python/c++等都属于高级语言)
(4)编译就是指:将高级语言的指令翻译为几条汇编指令或者机器指令
测试安装GCC是否成功
创建一个.c文件,文件名称为hello.c,内容如下:
#include&stdio.h&
int main()
printf("Hello World!\n");
然后,在terminal中输入编译命令,得到编译文件hello
gcc hello.c -o hello
运行编译文件hello
得到结果:
Hello World!
说明GCC配置成功!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:217995次
积分:2504
积分:2504
排名:第12940名
原创:139篇
转载:10篇
评论:49条
(1)(1)(3)(1)(9)(2)(9)(9)(26)(85)(3)ubuntu下如何编译C语言
我的图书馆
ubuntu下如何编译C语言
1.平台搭建LInux下如果单纯是进行C编译环境搭建的话,是比较容易实现的,因为系统内置了编译器gcc,所以我们要做的只不过是写好c源文件然后在进行编译就可以了如果没有gcc编译器的话,使用以下命令获取&&~# sudo apt-get install gcc同时要下载辅助工具&&~# sudo apt-get install binutils头文件库&&~# sudo apt-get install Llibc6-dev除了gcc外,建议新手再安装以下的帮助文件,如果在编程过程中遇到什么问题的话可以参考这些文档C Library (用来查询语法使用方式的文档)&&~# sudo apt-get install glibc-docLinux下C语言编程参考文档&&~# sudo apt-get install glibc-doc-referenc函数的用法说明文档&&~# sudo apt-get install manpages-dev用来连接多个源文件生成的目标文件的程序make&&~# sudo apt-get install makemake程序的使用说明文档&&~# sudo apt-get install make-doc安装了以上的说明文档后,大家在编程中如果遇到什么问题 可以使用man命令查询帮助文档,例如:~# man getch~# man make查看完帮助后,按q退出文档关于用什么写源代码,我个人推荐使用kate,经过简单的设置之后,kate能满足编写C语言的需求,且其诸多功能也为编写与检查源文件中的错误提供了很多便利(比如颜色标记,显示行好,自动折叠等)安装方法:# sudo apt-get install kate-----------------------2.程序编写、编译与运行安装好之后,你可以在应用程序&其他里找到Kate,打开后在工具菜单的语法加亮和缩进中设置成c样式,然后就可以写自己的C程序了,如:#include &stdio.h&int main(int argc, char **argv){& & system("clear");& & printf("Hello World!\n");& & return 0;}输入完程序后用ctrl+S保存,我这里假设保存路径为/home/user1/桌面/helloworld/hello.c然后就是编译,打开终端,进入目录# cd /home/user1/桌面/helloworld/然后用gcc进行编译# gcc -Wall hello.cgcc会显示编译过程中发现的问题于错误,若无错误出现则会编译成文件a.out运行程序(a.out为编译生成的文件)# ./a.out这时候屏幕会显示Hello World!~#表示编译运行成功-------------------其它说明:ubuntu8.04默认不支持getch(),getchar();gets()等函数,如果大家想使用则需要安装curses库文件#& & sudo apt-get install libncurses5-dbg#& & sudo apt-get isntall libncurses5-dev并且在写源代码时要加上#include&curses.h&或者在用gcc编译时加上-lcurses参数,例如:#& &gcc -Wall ./hello.c -lcurses就可以使用getch等函数了注意:getch函数在linux控制台下无法起到暂停程序的作用,大家可以用getchar替代getch实现这个功能--------------------------小技巧:如
果编写一个比较大的程序,需要很长时间完成的话,大家可以建立一个启动器,以便快速方便的进行编译,比如你要花很多天编写一个源程序,就可以在桌面上建立
一个启动器,指向c程序所在的目录,起动器命令如下(这里以C源程序在/home/user1/桌面/hello/目录下为例)gnome-terminal&&--working-directory=/home/user1/桌面/hello/以后每次进行编译时打开此起动器,就可以直接使用gcc对源程序文件名进行编译而无需输入很长的路径了~# gcc -Wall hello.c~#./a.out
TA的最新馆藏[转]&| 评论关闭
在windows上,很多人习惯用VC或者Visual Studio写代码和编译,那么在ubuntu中有什么工具可以编译C++代码呢?
ubuntu上编译C、C++代码的编译器是GCC、G++。
怎么在ubuntu上安装gcc、g++呢?
ubuntu中安装gcc、g++的命令:
sudo install gcc
sudo install g++
怎么使用g++、gcc编译代码呢?
编译c语言代码
gcc -g -Wall fileName.c -o a
编译cpp代码:
g++ -g -Wall fileName.cpp -o a
上面命令中最后的 a 是你想要编译生成的可执行程序文件名,可以任意的文件名(不带扩展名,例如 a),也可以为空,那么就会生成和源代码文件名相同的二进制文件。
除非注明,的文章均为原创,转载请注明作者和出处。本文链接地址:

我要回帖

更多关于 开关电源生产厂家 的文章

 

随机推荐