漫谈硬编码

2023-11-10

一、什么是硬编码

在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。

例如:以C++为例

char szText[100];

/* code */

for (int i = 0; i < 100; ++i)

{

         /* code*/

}

上述语句使用固定值100限定了循环的次数,而没有根据字符串szText的实际长度来决定循环的次数,类似用固定值来限制变量值的情况就是硬编码。

二、硬编码的缺点

用这种方法编译后,如果以后需要更改此变量就非常困难了。

例如:求圆的面积

S = 3.14*r*r;    //这就是硬编码,直接把PI写成了3.14。

如果现在想把圆的面积精度更高一点,PI要使用3.1415926,然而代码已经编译成了可执行程序,因此除了修改代码没有其他办法解决。(可以通过读取外部配置文件,运行时动态的读取PI的值)

三、如何避免

大部分程序语言里,可以将一个固定数值定义为一个宏,然后用这个宏来取代变量名称。当宏名称改变时,变量名不变,这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。

例如:

#define MAX_TEXT_LEN 128

/* code */

for (int i = 0; i < MAX_TEXT_LEN; ++i)

{

         /* code*/

}

如果在代码中多处用到了代表某一特定意义的固定值,尽管通过编辑器的查找替换功能也能实现整个变量名称的替换,但也很有可能出现多换或者少换的情况,而在计算机程序中,任何小错误的出现都是不可饶恕的。最好的方法是单独为变量名划分空间,来实现这种变化,就如同前面说的那样,将需要改变的变量名暂时用一个定义好的宏来代替就是一种很好的方法。通常情况下,都应该避免使用硬编码方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

漫谈硬编码 的相关文章

  • 西安电子科技大学计算智能导论公茂果老师课程所有PPT

    西安电子科技大学计算智能导论公茂果老师课程所有PPT http pan baidu com s 1hqst8pe 随着信息技术的发展 计算的观念越来越显示其在各个领域的威力 从计算的角度审视世界 认为从物理世界 生命过程直到人类智能都是可计
  • Merkle Patricia Tree (MPT) 以太坊merkle技术分析

    一 传统merkle树缺陷 我的这篇博客merkle tree 分析 详细解释了merkle树的原理和作用 然而传统的merkle树有他的局限性 以下对Vitalik blog原文的翻译可以很好的阐述 传统merkle树的一个特别的限制是
  • vue遍历Map,Map在vue中的使用方法

    Map在vue中的使用方法 html 遍历的时候要遍历两遍
  • atoi函数源代码

    atoi函数源代码 isspace int x if x x t x n x f x b x r return 1 else return 0 isdigit int x if x lt 9 x gt 0 return 1 else ret
  • sprintf, snprintf, _snprintf, sprintf_s 等的区别

    先放结论 1 在支持snpritf的编译器 只使用int snprintf char buffer size t count const char format argument 无论成功或者失败 都会返回字符串的总长度 不包括结束符 如果
  • 当了程序员才知道的事情

    坐在靠墙角的程序员王二狗 如果这哥们键盘敲的啪啪响 时不时面带笑容 很可能是在跟前台 测试 UI 美工 产品的小美眉聊今天又发现楼下新开的餐馆 如果嘴角带弧度 手不放在键盘上而是一直抓着鼠标擦滚轮且显示器角度靠内 那一定是摸鱼刷某乎 如果这
  • 后端转前端,该如何快速学习

    后端转前端还是比较容易的 学习难度降低了 多花点时间实操 基本可以接手项目 首先初学者要知道web前端工程师的目前核心技术 主要有HTML5 CSS JavaScript JQuery Ajax等技术 而且想要成为一名优秀的web前端工程师
  • android 之 如何让app没有图标

    我们有时候需要让我们的app没有图标 不要问我没有图标要干啥 我只是说的一个需求 单讲技术不说别的 首先我们要获得 PackageManager 的对象 PackageManager packageManager getPackageMan
  • 聊一聊全景图

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 李洋 前段时间学习了ThreeJS项目里边关于全景图的案例之后 自己动手练习了一下 实现了两个全景图的例子 分别如下 WebGLRender 球型全景图 WebGLRender
  • react时间戳转换成需要格式

    后端返回前端日期时间 一般给你的都是时间戳 然后前端展示需要转换成需要格式 以下是我开发中常遇到需要转换成的格式 看代码 class DateApi 将输入的毫秒字符串or毫秒数转换成指定的字符串格式 param string msStr
  • 实体类(VO,DO,DTO)的划分

    经常会接触到VO DO DTO的概念 本文从领域建模中的实体划分和项目中的实际应用情况两个角度 对这几个概念进行简析 得出的主要结论是 在项目应用中 VO对应于页面上需要显示的数据 表单 DO对应于数据库中存储的数据 数据表 DTO对应于除
  • 为你推荐10款开发常用的代码编辑器

    代码编辑器对于程序员来说十分重要 一个好的编辑器可以节省开发时间 提高工作效率 这篇文章会介绍10个优秀且免费的编辑器 它们都是非常方便易用的环境 你可以用它们来编写代码 查看源文件和文档等 简化你的工作 本文由PHP100中文网编译 转载
  • tensorflow-gpu版本详细安装教程(Win10,Python3.7.9,cuda11.2,cudnn8.1.0)

    目录 cuda安装 cudnn安装 python安装 tensorflow安装 cuda安装下载 首先要注意自己的显卡支持cuda的版本 可以这样自查 可以看到适合自己的cuda版本 这里我选择了cuda11 2版本 cuda安装包下载链接
  • 三招搞定你的ubuntu安全问题

    本篇主要介绍以下三个部分 反病毒引擎clamav的安装和使用 ubuntu ufw限制访问地址 ubuntu用户连接失败锁定指定时间 反病毒引擎clamav的安装和使用 简介 ClamAV是一款开源的反病毒引擎 用于检测病毒 特洛伊木马 恶
  • 作为技术岗位面试官的一些分享

    我在过去的四年里参与了很多公司技术岗位的面试 说实话要看出一个人的综合素质 我还真的做不到 至于其他面试官是否可以 我也不得而知 但我个人感悟是 在面试过程中 面试官更加多的是去匹配和比较 在招聘过程中 企业会根据人力需求先制定出一套招聘需
  • Nginx日志常见时间变量解析

    request time 官方解释 request processing time in seconds with a milliseconds resolution time elapsed between the first bytes
  • 非常详尽的 Linux 中 WEB服务器配置与管理 (通过例子来讲解)

    Apache服务器的安装与启动 检查是否已经安装了APACHE并启动它 这是已安装好的状态 root root rpm qa grep httpd httpd tools 2 2 15 53 el6 x86 64 httpd 2 2 15
  • ySql.Data.Types.MySqlConversionException: Unable to convert MySQL date/time value to System.DateTime

    public DateTime Createtime MySql Data Types MySqlConversionException Unable to convert MySQL date time value to System D
  • C#有像Java ThreadLocal的类似实现吗?

    在C 中 可以使用 ThreadLocal
  • 对技术行业的深度思考

    技术行业是当今世界最为热门和发展迅猛的领域之一 无论是互联网 人工智能还是区块链 技术的快速发展正在改变着我们的生活和社会 然而 我们是否真正思考过技术在我们生活中的影响和意义 本文将对技术行业展开深度思考 探讨其带来的优势与挑战 以及如何

随机推荐

  • 100+国产大模型排行榜!部分超越ChatGPT-4

    国产大模型的发展速度惊人 至少说明在国内的显卡数量是足够多的 如果能集中资源 或许能快速跟进ChatGPT 不过 其中不少厂家号称已经超越ChatGPT 4 让人感到欣慰 觉得哪个好 评论区见
  • 【金融】新成立基金建仓时点、行业分布与市场行情关系探究

    需要进一步交流 获取数据和代码的同学欢迎私信奥 基于新成立基金建仓带入市场的巨量资金会推动市场行情这一逻辑 开展了一系列研究 首先提出了通过基金净值识别建仓行为 累计绝对值涨跌幅法 和通过基金 值识别建仓行为 法 的两种方法 在通过回顾历史
  • 一键修改分辨率bat_设置分辨率的批处理

    if computername name1 SETRES h800 v600 b32 f85 if computername name2 SETRES h1024 v768 b32 f85 if computername name3 SET
  • libevent服务端,单线程应用

    libevent版本 libevent 2 1 12 stable include
  • 数据库MySQL与SQLite

    常用数据库及Qt中的用法 一 常用数据库 数据库管理系统 DBMS 是旨在使用 检索和定义规则以验证和操作数据库中的数据的软件 有四种DBMS类型 关系型 面向对象型 分层型和网络型 有很多开源数据库 包括MySQL SQLite等 SQL
  • Android13 Windows11-VMware-Ubuntu 源码下载和全编译

    Windows11 VMware Ubuntu Android13 源码下载和全编译 官方教程文档 想用 Mac 编译源码的朋友基本可以放弃想法了 我试过了各种兼容错误 不得已用了 Windows 装 VMware Ubuntu 一 硬件配
  • 知道这20个正则表达式,能让你少写1,000行代码

    正则表达式 一个十分古老而又强大的文本处理工具 仅仅用一段非常简短的表达式语句 便能够快速实现一个非常复杂的业务逻辑 熟练地掌握正则表达式的话 能够使你的开发效率得到极大的提升 正则表达式经常被用于字段或任意字符串的校验 如下面这段校验基本
  • python3 [爬虫入门实战]scrapy爬取盘多多五百万数据并存mongoDB

    总结 虽然是第二次爬取 但是多多少少还是遇到一些坑 总的结果还是好的 scrapy比多线程多进程强多了啊 中途没有一次被中断过 此版本是盘多多爬取数据的scrapy版本 涉及数据量较大 到现在已经是近500万的数据了 1 抓取的内容 主要爬
  • tensorrt的安装和使用

    安装 提前安装好 CUDA 和 CUDNN 登录 NVIDIA 官方网站下载和主机 CUDA 版本适配的 TensorRT 压缩包即可 以 CUDA 版本是 10 2 为例 选择适配 CUDA 10 2 的 tar 包 然后执行类似如下的命
  • rsync 远程同步

    Rsync 简介 rsync Remote Sync 远程同步 是一个开源的快速备份工具 可以在不同主机之间镜像同步整个目录树 支持增量备份 并保持链接和权限 且采用优化的同步算法 传输前执行压缩 因此非常适用于异地备份 镜像服务器等应用
  • auto 和 auto &是不一样的

    前言 什么时候用auto什么时候用auto 呢 先看代码testauto cpp include
  • unity 实现文本选中_Unity中如何读取TXT文本内容

    在游戏开发过程中 我们是离不开需求的 而需求的事情是由策划来做的 那么我们和策划也是需要沟通交流的 那么是怎么交流的呢 策划不需要写代码 只需要思考一些游戏的内容 数据 玩法的实现 然后让我们按照策划的东西来弄 所以和策划的沟通就是非常频繁
  • pgsql 自定义排序

    需求简述 用户要求查询数据表 使得输出结果指定中文字段chn name按照自定义的顺序 电 水 风 火等顺序排序 表内容 自定义排序sql 排序结果 工作中遇到的sql查询案例 如果有更简便的查询sql 欢迎多多交流
  • PlutoSDR学习指南【1】环境搭建+资料分享

    1 软件无线电及Pluto简介 软件无线电平台最通俗的语言来说 即通信系统中的功能采用软件实现 且可反复使用 比如简单的发射和接收信号 可以通过软件设置 信号的编码解码 可以通过软件设置 甚至你可以自己定义一种协议 用你自己的协议来实现一套
  • Python 已知 RSA 模数和指数,生成公钥进行加密

    在学习 js 加密的过程中 关于 RSA 加密知识有所接触 因此记录一下实际过程中遇到的问题 在这里我们主要讲解当没有公钥 已知公钥模数和指数的情况下 实现 RSA 加密 一 cryptography 包获取 RSA 公钥 首先需要安装 c
  • 【福利】Google Cloud Next ’23 精彩待发,Cloud Ace 作为联合赞助商提前发福利~

    Cloud Ace 是 Google Cloud 全球战略合作伙伴 在亚太地区 欧洲 南北美洲和非洲拥有二十多个办公室 Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位 并连续多次获得 Google Cloud 各类奖项
  • 【Neo4j与知识图谱】Neo4j的常用语法与一个简单知识图谱构建示例

    文章目录 一 Cypher基本语法 1 创建节点和关系 2 查询节点和关系 3 更新节点和关系 4 删除节点和关系 二 小示例 2 1 准备数据和创建实体和关系 2 2 进行查询修改等操作 一 Cypher基本语法 Neo4j是一种基于图形
  • 江西理工大学 微型计算机原理,江西理工大学-微机原理考试(wenwei)作业.docx

    江西理工大学 微机原理考试 wenwei 作业 第一章1 在计算机内部为什么要采用二进制数而不采用十进制数 2 设机器字长为6位 写出下列各数原码 补码和移码 10101 11111 10000 10101 11111 10000 3 利用
  • keepalived 源码编译安装

    1 官方下载源码包 root zk01 wget https www keepalived org software keepalived 2 0 20 tar gz 2 解压 root zk01 tar zxvf keepalived 2
  • 漫谈硬编码

    一 什么是硬编码 在计算机程序或文本编辑中 硬编码是指将可变变量用一个固定值来代替的方法 例如 以C 为例 char szText 100 code for int i 0 i lt 100 i code 上述语句使用固定值100限定了循环