基于Linux下的C语言入门-day1

2024-05-20 20:08
文章标签 语言 linux 入门 day1

本文主要是介绍基于Linux下的C语言入门-day1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经历了一礼拜的ruby on rails的全栈开发了解,觉得自己基本上已经放弃了目前基于Mac OS下开发的坚持,一来自己的笔电已经用了4年,开个MAC虚拟机占用的内存基本上已经到顶,切回Window界面会卡一会,而且在苹果系统内操作也是那种延迟的感觉,所以我立马买了一块kinston的4G内存条,打算改善一下爱机的身体~

所以呢,网站全栈开发先放一放罢。一是自己将来专业是通信,接触到网站设计开发的机会可能在两年内为0,除非自己非常喜欢做网页,有那种成就感;二是将来打算搞前端开发,那时候可能就会比较吃香。。。

话说回来,通信行业用的编程最多的语言无非就是C,C++,C#,再加上熟悉一门操作系统LInux,把这几门语言精通一两个,不管是在研究生做项目还是将来工作都是挺管用的,至少不会被老板说这个不会那个不会~这次来把昨天学的c语言基础知识回顾一遍,至少把它用文字表达出来,回顾一次可能会有新的收获。


Linux作为开源操作系统,深受广大程序员的喜爱。不仅是因为它完全免费,而且支持多任务,多用户,界面友好,支持多种平台。而在这里一个很大的特点就是可以当做嵌入式操作系统来使用,而且现在到处都是嵌入式的设备了,银行的pos机,火车站的自动取票机,都有嵌入式的身影。

首先你得装一个虚拟机,我是VMware12版本,操作系统我选择ubuntu,现在版本可能已经更新到了1604,而我能还在用1204,尴尬。。。

编辑器linux有自带的vi,但是我用的是windows下的source insight,感觉比较人性化,可以跨平台在linux的gcc下编译。

c语言要写的好,要让别人看得懂,要好易维护。要注意以下几点:

1.赋值,变量堆在一起;

2.相关功能的语句堆在一起;

3.调用函数在一起;

4.适当加一些注释。

5.对变量习惯性的赋初始值。


需要知道的是int main(void)这里的void不是空的意思,空我们一般都用null表示,这里是指不接受任意参数。对于几种数据类型了解他占几个bit,就是占几位。注意数据类型的长度是随着CPU类型和编译器的不同而改变,像以前turbo c上int只占2位,而我们现在的环境下通过sizeof()函数显示的是4位,long int=int =4位。而long double=12位~


对于常量和变量,常量不占用内存空间,不可变。而变量分为全局变量和局部变量,全局变量在开始运行时初始化,在main函数完全结束后才会释放,从开始到结束都会占用内存;局部变量在定义代码块时初始化,函数一结束就被释放~所以我们一般不用全局变量,因为占内存,而且通用性比较差。


对于操作符,有赋值操作符;乘除操作符,取模操作符。有个好玩的题目,老板发钱:第一天给你1元,第二天2元,第三天4元,那么第30天可以赚多少呢?不用pow函数去算,用自己思考的算法去解决。这里当然需要用到while循环,以下是循环语句:

while(days <= 30){

total += start;

days += 1;

start = start *2

printf("days:%d,start:%d,total:%d\n",days,start,total);

}


在语句中尽量避免运算符++ 和 - -,因为不同的编译器可能会出现不一样的操作顺序,因为他们的优先顺序仅仅比()低而已。

形参和实参:int sum(int a,int b),这括号里面的就是指形参,即函数声明。函数调用传递一个值时变量有值了,这便是实参~

static 修饰全局变量时,表示该变量在本文件中使用;修饰局部变量时,将该局部变量与全局变量一起存储,再次使用时保存了上次调用的值。

static的两个法则:

若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度

若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度。


还一个要注意的就是scanf("%s, str");这个时候定义的char str[32]="0",相当于ASCII码中的0所对应的48;而char str[32]={0}就是赋初始值为0.而第一句的str是定义的一个字符串数组,而我们要记住的是:数组名就是数组的首地址,并且是第一个元素的地址。头脑中可以想象一下摆列整齐的内存,在最前面大头针的就是首地址,今后学习指针时还需深入挖掘呢~

执行多文件,多模块编译时,要gcc 主c文件还有各个函数c文件,注意.h头文件也要写好,因为主函数要调用。.h文件如下定义:

#ifndef _SUM_H

#define _SUM_H

int sum(int x,int y)

#endif

诸如此类编写.h文件~


最后还是来介绍一下linux下的编译操作,需要在windows下通过虚拟机共享文件到Ubuntu上,cd/mnt/hgfs/linux_code这几步就进入了自己在win下码的代码。使用gcc main.c就开始编译,如果不报错,打./a.out,就可以执行结果(相当于双击)。一般打完首字母后打tab键,会补齐剩下的单词,前提是要存在这个文件或目录。

遇到段错误怎么办?一般这样做:

gcc main.c -g

gdb a.out

r

bt

之后终端会显示出具体的错误行数,之后去认真修改就好了~



这篇关于基于Linux下的C语言入门-day1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995942

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联