优雅编程,从空格、空行、缩进和注释开始

news2024/11/20 12:34:07

在这里插入图片描述

很多初学者的代码其实都不够“漂亮”,那是因为没有养成好的编码习惯。本篇博客以C语言为例,总结一些好习惯。其实,很多习惯都是肌肉记忆,举个例子:请你写一个程序,输入2个整数并输出它们的和。有些朋友可能写出来是这个样子。

#include<stdio.h>
int main()
{
	int a=0;
	int b=0;
	int sum=0;
	scanf("%d%d",&a,&b);
	sum=a+b;
	printf("%d\n",sum);
	return 0;
}

我写这段代码,是在模仿有些朋友在初学的时候容易写成的样子。更有甚者,写成这个样子:

#include<stdio.h>
int main()
{
int a=0;
int b=0;
int sum=0;
scanf("%d%d",&a,&b);
sum=a+b;
printf("%d\n",sum);
return 0;
}

让人看的不太舒服。甚至可以让你更加不舒服:

#include<stdio.h>
int main()
{
int a,b,sum;scanf("%d%d",&a,&b);
sum=a+b;printf("%d\n",sum);
return 0;
}

这是什么感觉?嗯……你为啥不都写在一行呢?下面我来谈谈好的写法是怎样的。

空格

首先改进一下第一种写法,先加一些空格:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	scanf("%d %d", &a, &b);
	sum = a + b;
	printf("%d\n", sum);
	return 0;
}

我在#include和头文件之间、“双目操作符”两端、逗号后面、scanf的两个%d之间都加上了空格,感觉舒服一点了。这就是今天我要说的第一个习惯:在合适的地方添加空格!

什么是合适的地方呢?双目操作符两端,逗号后面,分号后面,关键字后面都可以添加空格。比如经典的for循环,糟糕的写法是:

for(int i=0;i<10;++i)
{}

首先,for作为关键字,后面可以添加空格,分号后面也可以添加空格,如下:

for (int i=0; i<10; ++i)
{}

等号和小于号属于双目操作符,两端也可以添加空格:

for (int i = 0; i < 10; ++i)
{}

这样是不是好看多了?

注意:++是单目操作符,++和i之间不要添加空格,多余的空格显得画蛇添足,多此一举。

空行

除此之外,可以在合适的地方添加空行,比如函数和函数之间,函数内部不同逻辑的代码之间。比如:

void test1()
{
	printf("test1\n");
}

void test2()
{
	printf("test2\n");
}

void test3()
{
	printf("test3\n");
}

前面的例子中,头文件的包含和main函数之间可以添加空行。在main函数内部,变量的定义,输入值并且计算输出,main函数的返回属于不同的逻辑,中间可以添加空行。

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	
	scanf("%d %d", &a, &b);
	sum = a + b;
	printf("%d\n", sum);
	
	return 0;
}

缩进

顺带一提,“缩进”也很重要。大括号内部的逻辑都要向右缩进,比如:

if (flag)
{
	printf("true\n");
}

当然,如果省略大括号的情况,也要缩进。

if (flag)
	printf("true\n");

过多的缩进也不好。比如switch case语句中,case一般和switch的大括号对齐,而不缩进。

switch (n)
{
case 1:
	printf("1\n");
	break;
case 2:
	printf("2\n");
	break;
default:
	printf("default\n");
	break;
}

自然,在前面的例子中,main函数内部的语句都要添加缩进。

注释

还有最后一点:记得写注释!注释是用来解释代码的,要放在解释的代码的上边或右边,比如:

#include <stdio.h>

int main()
{
	// 定义变量
	int a = 0;
	int b = 0;
	int sum = 0; // 存放和
	// 输入数据
	scanf("%d %d", &a, &b);
	// 计算
	sum = a + b;
	// 输出数据
	printf("%d\n", sum); // 输出后换行
	
	return 0;
}

如果注释在单独的一行,可以认为这一行是一个“空行”,就不用添加额外的空行了。当然,你想添加也行,比如:

#include <stdio.h>

int main()
{
	// 定义变量
	int a = 0;
	int b = 0;
	int sum = 0; // 存放和
	
	// 输入数据
	scanf("%d %d", &a, &b);
	
	// 计算
	sum = a + b;
	
	// 输出数据
	printf("%d\n", sum); // 输出后换行
	
	return 0;
}

总结

  1. 双目操作符两端,逗号后面,分号后面,关键字后面都可以添加空格。
  2. 函数和函数之间,函数内部不同逻辑的代码之间可以添加空行。
  3. 大括号内部的逻辑都要向右缩进,但是过多的缩进也不好。
  4. 添加注释,注释是用来解释代码的。

感谢大家的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用eclipse创建一个图书管理系统(1)-----搭建架构

目录 思维导图&#xff1a; 图书管理系统的创建&#xff1a; 第一步&#xff1a;搭建框架-------使用者 第二步&#xff1a;搭建框架------被使用者 第三步&#xff1a;操作方法 第四步&#xff1a;main函数 思维导图&#xff1a; 前言&#xff1a; 昨天学了一下使用Java…

演出剧院门票售票预约小程序开发制作功能介绍

基于微信小程序的票务预约小程序&#xff0c;广泛适用于演出主办方、剧院、艺术中心、活动中心售票、景区门票售票、儿童游乐园售票、会务签到、展会售票签到、教育培训报名预约、健身预约功能。 多场景售票支持&#xff1a; 售票软件支持多种场景的售票&#xff0c;支持选座、…

python3+Scrapy:爬虫框架问题合集 【参考转载大佬文章 + 自己解决方法】

1、发送请求403报错排查 参考链接链接: 使用scrapy做爬虫遇到的一些坑&#xff1a;爬虫使用scrapy爬取网页返回403错误大全以及解决方案 参考链接链接: 使用scrapy做爬虫遇到的一些坑&#xff1a;网站常用的反爬虫策略&#xff0c;如何机智的躲过反爬虫Crawled (403) 参考链接…

javaEE 初阶 — Cookie 与 Session

文章目录 Cookie 的四个问题Cookie 的典型应用Cookie 与 Session 的区别代码示例体现两者的关联关系1. 设计思路2. 编写前端登录页面3 编写 LoginServlet 处理登录请求3.1 服务器是如何组织会话的 4. 编写 IndexServlet 生成主页4.1 抓包观察交互过程 Cookie 的四个问题 1、Coo…

Doris(25):Doris的函数—Bitmap函数

1 BITMAP_AND(BITMAP lhs, BITMAP rhs) 计算两个输入bitmap的交集,返回新的bitmap. select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(2))) cnt; select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(1))) cnt; 2 BITMAP_CONTAINS(BITMAP bitmap, BIGINT input…

VGAM | tobit模型

专注系列化、高质量的R语言教程 推文索引 | 联系小编 | 付费合集 本篇来介绍tobit模型&#xff0c;使用的工具包是VGAM。 library(VGAM) 目录如下&#xff1a; 1 Tobit分布2 tobit模型3 运行模型 例1例2例34 其他 1 Tobit分布 tobit模型主要应用于因变量存在删失的情况。以正态…

交换机-Exchanges

交换机 Exchanges 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反&#xff0c;生产者只能将消息发送到交换机(exchange)&#xff0c;交换机工作的内容非常简…

Threejs进阶之十:让模型移动到鼠标点击的指定位置

上一节中我们实现了物体沿指定轨迹移动的动画效果&#xff0c;这一节我们来实现让模型移动到鼠标点击的制定位置的动画效果。 先看下实现后的最终效果 要实现上面的动画效果&#xff0c;我们需要通过以下步骤来实现 第一步&#xff0c;监听鼠标事件 我们需要监听鼠标的点击事…

2 ROS2话题通讯基础(2)

ROS2话题通讯基础 2.5 自定义话题通讯2.5.1 自定义话题通讯的一般流程2.5.2 创建自定义话题消息简单例子2.5.3 快速创建C/C和Python自定义话题通讯的Student.msg 2.6 使用C/C实现自定义话题通讯2.6.1 创建C/C自定义话题发布方功能包并编写节点文件2.6.2 配置C/C自定义话题发布方…

如何选择适合企业的网盘?必须要考虑这几个方面

随着云存储技术的发展&#xff0c;传统的文件存储服务已逐渐不能满足企业日益增长的文件应用、共享和存储需求。越来越多的企业开始将目光转移到企业网盘上。 在选择企业网盘工具时&#xff0c;比较重要的有两个方面&#xff0c;一个是数据的安全性&#xff0c;一个是协同办公。…

Java 将增加虚拟线程,挑战 Go 协程

Java19 正式发布&#xff0c;带来了一个 Java 开发者垂涎已久的新特性 —— 虚拟线程。在 Java 有这个新特性之前&#xff0c;Go 语言的协程风靡已久&#xff0c;在并发编程领域可以说是叱咤风云。随着国内 Go 语言的快速发展与推广&#xff0c;协程好像成为了一个世界上最好语…

K8S二进制单节点 一键部署K8S_V1.21.x

1、安装前注意事项 安装shell脚本在文章最后位置 1、提前配置静态IP 把脚本的IP 192.168.1.31 换成你的IP 2、创建安装包路径 /home/software/shell 所有的tar包 shell脚本 放在这里 3、免密登录配置所有节点 提前下载镜像如下&#xff1a; [rootmaster01 ~]# docker image…

Ubuntu搜狗输入法安装指南

Ubuntu搜狗输入法安装指南 Ubuntu搜狗输入法安装指南搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010Ubuntu20.04及以上安装搜狗输入法步骤 Ubuntu搜狗输入法安装指南 下载地址&#xff1a;https://shurufa.sogou.com/ 计算为amd64的选择x86_64&#xff0c;以下教程来源…

ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(配准与对齐)

文章目录 1.rgb、depth相机标定矫正1.1.标定rgb相机1.2.标定depth相机1.3.rgb、depth相机一起标定&#xff08;效果重复了&#xff09;1.4.取得标定结果1.4.1.得到的标定结果的意义&#xff1a;1.5.IR、RGB相机分别应用标定结果1.5.1.openCV应用标定结果1.5.2.ros2工程应用标定…

[stable-diffusion-art] 指北-2 如何为sd提出好的prompt

https://stable-diffusion-art.com/how-to-come-up-with-good-prompts-for-ai-image-generation/https://stable-diffusion-art.com/how-to-come-up-with-good-prompts-for-ai-image-generation/1.prompt可以促使模型生成以前不存在的高质量的图片&#xff0c;例如&#xff1a;…

windows如何使用脚本打开多个软件

文章目录 windows如何使用脚本打开多个软件问题缘由省流版本制作脚本步骤新建文本找到文件的安装位置方法一&#xff1a;方法二&#xff1a; 总结 windows如何使用脚本打开多个软件 问题缘由 因为强迫症&#xff0c;不想让软件自启&#xff0c;会导致开机变慢&#xff0c;电脑…

Lecture7 处理多维特征的输入(Multiple Dimension Input)

以实际代码出发&#xff0c;逐行讲解。 完整代码&#xff1a; import numpy as np import torch import matplotlib.pyplot as plt# load data xy np.loadtxt(C:\\Users\\14185\\Desktop\\diabetes.csv, delimiter,, dtypenp.float32) x_data torch.from_numpy(xy[:, :-1])…

226. 翻转二叉树【58】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 543. 二叉树的直径【71】 力扣此题地址&#xff1a; 226. 翻转二叉树 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返…

DAY 52 LVS+Keepalived群集

Keepalived工具介绍 普通集群容易出现的问题 企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险。 单点故障一旦发生&#xff0c; 企业服务将发生中断&#xff0c;造成极大的危害。 Keepalived工具 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&…

v2c - 从Verilog 转换到 C语言的工具

文章目录 一、如何安装1.下载二进制文件2.基准测试 二、如何使用v2c的应用描述工具流程使用 v2c 转换器的工作示例 三、注意事项情形一&#xff1a;拼接&#xff1a;{4{x}}情形1-1 y&{x&#xff0c;x&#xff0c;x&#xff0c;x}情形1-2 y&{x&#xff0c;x&#xff0c;…