1.选对平台很重要:
如果说把C语言比作一只猛虎,那么windows就是人为的一个动物园。猛虎随强大,终究有所束缚。而Linux则是这只猛虎的森林,在抛弃windows下编写C语言转而在Linux下编写C语言犹如王者归来!
2.上古神器Vi:
在windows有诸如Microsoft Visual C++这样的集成开发环境,那么在Linux中我们该如何编写源代码,编译,调试,执行呢?我们在windows上编写Hello world程序时,编译器屏蔽了很多细节。我们将在Linux中一步步让这些细节重现。这时,让我们先来掌握一个上古神器Vi吧! 以下是常用的Vi命令:
vim hello.c //打开文件进行编辑
i //插入
I //插入到单词最前
a //追加
A //追加到单词的末尾
v //视图模式
Esc //命令模式
jkhl //上下左右
Ctrl+n //补全命令
:q //退出
:q! //强制退出
:wq //保存并推迟
3.从stdio.h说起:
我们每次都引入stdio.h这个文件,那么这个文件有什么用呢?它在哪儿呢?请看下图(Ctrl+n后可以看到):
好了,可以想到C语言第一行#include的东西应该全在上图显示的文件夹了。我们不管看懂看不懂进去看看总没有错。利用 ls *.h 查看所有.h结尾的文件:
这时,我们就可以看看到底这些用include包含进来的文件长啥样了。有兴趣的读者自行阅读哦(笔者看不懂啊)。
说简单点:stdio == standard input and output 就是标准输入输出,也就是从键盘得到的字符作为标准输入,输出到屏幕作为标准输出。对应的两个函数为scanf和printf。这两个函数的原型其实是这样:
scanf("%d",&a); == fscanf(stdin,"%d",&a);
printf("Hello world!") == fprintf(stdout,"Hello world");
那假如有100条动态生成的数据需要输入到一个程序中,我们还要从键盘手工输入吗?1000条呢?答案是No。做一个简单的实验:
//这是mkaedata.c
#include<stdio.h>
int main(int argv,char *argc[])
{
int i;
for(i=0;i<=100;i++) {
printf("%d\n",i);
}
return 0;
}
gcc makedata.c -o makedata.out //编译makedata.c
./makedata.out > data.txt //将输出重定向到data.txt文件
这时data.txt中有了0-100这些数据
接着,利用这些数据就可以搞事情:
//这是sum.c
#include<stdio.h>
int main(int argv,char *argc[])
{
int i=0;
int sum=0;
for(i=0;i<=100;i++) {
printf("读取到%d条数据\n",i+1);
scanf("%d",&i);
sum += i;
}
printf("The sum is %d\n",sum);
return 0;
}
gcc sum.c -o sum.out
./sum.out < data.txt //将data.txt中的数据作为输入
结果就是这样:
此处省去半截图:)
4.为什么是 int main?
因为要返回一个0啊,嘿嘿。当然,这是程序执行成功后的返回。在上边程序执行完成的基础上运行下边的命令:
$? 就是程序执行完的返回值,当我们将 return 0 注释的话这里的返回值就变得不确定了,感兴趣的话自己尝试:)
这时,通过修改data.txt中的数据,我们就可以通过返回值做点事情:
#include<stdio.h>
int main(int argv,char *argc[])
{
int i=0;
int sum=0;
for(i=0;i<=100;i++) {
printf("读取到%d条数据\n",i+1);
scanf("%d",&i);
sum += i;
}
if(sum==5050) {
printf("The sum is %d\n",sum);
return 0;
}else {
fprintf(stderr,"我不想的到这个值:(\n");
return -1;
}
}
为什么变成了255? 其实我也不知啊(请教各位解惑)。总之,通过错误流可以处理一些逻辑的。
5.主调函数的参数 (int argv,char *argc[]) 是什么鬼?
是骡子是马,打印出来瞧瞧:)
#include<stdio.h>
int main(int argv,char *argc[])
{
printf("The argv is :%d",argv);
int i;
for(i=0;i<argv;i++){
printf("第%d个参数的值为:%s\n",i+1,argc);
}
return 0;
}
给出一个范例,聪明的你一定知道这两个参数是神马鬼了吧:)
6.第一次写博客,不喜qing喷,嘿嘿:)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com