代码大全学习-13-如何使用变量(General Issue in Using Variables)

Ubuntu 13.04 + Nginx + Drupal 7 高性能部署实战 LEMP 栈(Linux、Nginx、MySQL、PHP)是轻量级 Web 应用的经典部署范式,其核心在于 Nginx 的事件驱动模型与 PHP-FPM 进程池的协同优化,显著降低内存开销与上下文切换成本。相比 Apache 的多进程 PHP 加载模式,Nginx 仅处理 HTTP 协议与静态资源,将动态请求交由独立、可调优的 PHP-FPM 池执行,实现资源按需分配与故障隔离。该架构特别适用于内存受限的 VPS 环境,能有效支撑 Drupal 7 这类模块化深度高、缓存与权限逻辑复杂的 CMS。本文基于 阅读详情

从这一章开始,将讲述变量有关的内容。这里所说的变量是广义的,包括系统自带的类型像整数,数组等,也包括各种自定义的对象。

这一章讲的是一些基本的用法,定义,初始化,生存范围,绑定时间等。

定义要注意的是一定要显式定义,有些语言支持隐式定义,像VB,最好不用,可能出错。

初始化是最容易出错的地方,有一些规则可以尽量减少出错的概率。

  • 一、定义的时候初始化。
  • 二、第一次使用之前初始化。一二两条和起来最理想的就是在第一次使用之前才定义并初始化。
  • 三、对于值不变的变量,用final或者const之类的修饰符。
  • 四、对于计数器累加器要格外注意,就是常用的i,j,k,sum等。
  • 五、类的成员变量要在构造函数里初始化。
  • 六、检查是否需要重新初始化。
  • 七、利用编译器检查是否有没初始化的变量。
  • 八、检查指针的初始化是否指向正确的内存空间。
  • 九、在程序的开始初始化内存,比如全部清零或是全部填充某个值。
  • 十、确保每个定义的变量都有用到,没用的就删掉。

变量的生存范围是越小越好,生存时间是越短越好,这样会降低程序的复杂性。要注意的是不要在这个变量已经不存在了还在试图去用它,常见的错误就是指针指向的内存已经释放了,后面还在用。让变量的生存范围小,都集中在那一块,就更容易发现代码中这样的错误。

绑定时间(binding time)就是变量和它的值绑定在一起的时间。常见的有这么几种:

  • 一、在写代码的时候,也就是常说的写死了。
  • 二、在编译的时候,可能用一些宏定义啊,命名常量啊来实现。
  • 三、在装载的时候,从外部存储读进来值。
  • 四、在对象实例化的时候,从外部存储读进来值。
  • 五、实时的,每次更新都从外部存储读进来值。

从一到五,绑定的时候越来越晚。但这个不一定越晚越好。通常来说,绑定越早,程序越不灵活,但是越简单;绑定越晚,程序越灵活,但是越复杂。这就要有个平衡了,根据需要吧。不过第二种比第一种要好几乎是勿容置疑的。

最后值得一提的是应确保每个变量只用于一个目的。像那种一个temp变量满天飞的做法是相当容易出错的,而且会导致程序的可读性降低。还有一个变量就应该只是它的名字表示的那一种意思,不要还隐藏什么其它的意思。像NumOfPeople,就不要说它非负的时候表示人数,是负数的时候表示缺席的人数,也许你很清楚是这样,但这会给其他人带来很大的困惑。这种做法的起源应该是以前内存很紧张的时候为了省内存,但是事过境迁,现在,99%的情况下,咱不差那几个字节的内存。

Over!附上Checklist: 

Checklist: General Issues In Using Variables

Initializing Variables

  • Does each routine check input parameters for validity? 
  • Does the code declare variables close to where they're first used? 
  • Does the code initialize variables as they're declared, if possible? 
  • Does the code initialize variables close to where they're first used, if it isn't possible to declare and initialize them at the same time? 
  • Are counters and accumulators initialized properly and, if necessary, reinitialized each time they are used? 
  • Are variables reinitialized properly in code that's executed repeatedly? 
  • Does the code compile with no warnings from the compiler? 
  • If your language uses implicit declarations, have you compensated for the problems they cause? 

Other General Issues in Using Data

  • Do all variables have the smallest scope possible? 
  • Are references to variables as close together as possible-both from each reference to a variable to the next and in total live time? 
  • Do control structures correspond to the data types? 
  • Are all the declared variables being used? 
  • Are all variables bound at appropriate times, that is, striking a conscious balance between the flexibility of late binding and the increased complexity associated with late binding? 
  • Does each variable have one and only one purpose? 
  • Is each variable's meaning explicit, with no hidden meanings?
基于GCC/Eclipse的TI CC26xx/CC13xx无线MCU开源开发环境搭建与调试指南 在嵌入式系统开发中,GNU工具链(GCC/GDB)与Eclipse IDE的组合为开发者提供了高度自由、跨平台且透明的开发工作流。其核心原理在于利用GCC编译器将C/C++源码编译为目标文件,再通过链接器脚本精确控制代码和数据在芯片内存(如Flash和SRAM)中的布局,这是嵌入式程序能否正确启动和运行的关键。这套开源方案的技术价值在于,它打破了厂商专属IDE的束缚,让开发者能够深入理解从源码到二进制固件的完整构建过程,特别是对内存映射、启动流程和中断向量表的掌控,这对于优化资源受限的嵌入式系统至关重要。在 阅读详情

相关推荐

Ubuntu 18.04 部署 ERPNext v13 实战指南:稳定、安全与生产就绪

ERP系统是企业数字化的核心基础设施,其部署稳定性直接关系到财务、供应链与制造流程的连续性。Linux服务器环境选择需兼顾长期支持(LTS)、内核兼容性与生态成熟度,而Ubuntu 18.04凭借至2028年的官方支持周期、Python 3.6原生适配及APT源稳定性,成为ERPNext v13等关键业务系统的首选验证平台。该组合在中小制造、本地化IT服务等真实产线场景中展现出强鲁棒性,尤其适合对停机敏感、需自主可控的数据环境。技术价值体现在组件级可审计部署——通过MariaDB字符集精准配置、Redis连

weixin_30274627的博客 429

OMA迁移前性能评估

捕获期间对性能的影响取决于工作负载,并与从客户端传输的数据量相关,从客户端发送到服务器的数据越大,相关的开销就越高。文件夹的命名格式为“时间日期+字符串”,CSV文件的命名格式为 “Schema名称.csv”。如果有多个Schema,则会生成多个对应的CSV文件。文件夹的命名格式为“时间日期+字符串”,CSV文件的命名格式为 “Schema名称.csv”。OMA可以消费Oracle WRC文件,但需要先通过自身的COLLECT阶段完成格式转换,生成可回放的中间文件,之后才能进行实际的流量回放测试。

Sebastien23的博客 74

Sparsh:用于基于视觉的触觉感知的自监督触觉表征【传感器:带标记点的 GelSight 2017、无标记点的 DIGIT】

t​⊕It−5​→x∈Rh×w×6tt−2t−4t−6∈R4×h×w×3t​∈Rh×w×3t​∈SE3). Tt​tt−1​≜ΔxΔy˙​Δθ∈SE2ˉ2∘0.5∘1.0∘to1.0∘2.0∘zt−1​zt​qt−1​qt​≜Δqt​Δqt1​...;Δq∈R7。

u013250861的博客 57

Autosar知识:方法论-绑定时间定义

binding time不是(如名称所示)精确的时间点,而是处理步骤的分类。 例如,绑定时间CodeGenerationTime是指从ARXML格式的AUTOSAR模型到代码的转换步骤。 在本节中,我们定义方法中工件和任务的绑定时间

MichaelMCFD的博客 1540

代码大全2》阅读笔记05--Chapter 10 General Issues in Using Variables

Chapter 10 General Issues in Using Variables 使用变量的一般事项 10.1 Data Literacy 数据认知 10.2 Making Variable Declarations Easy 轻松掌握变量定义 ·Implicit Declarations 隐式声明 1. 有些语言是支持隐式声明。例如VB中使用一个未声明的变量时,编译...

weixin_30920853的博客 102

mysql开启general log用于审计工作

1.适用场景 对于负载不高的mysql服务,可以开启general log用于审计,general log的开启不需要重启也不需要安装其他的工具。 2.general log日志的开启 查看是否已开启general 日志 mysql> show variables like '%general%'; +------------------+-------------------------------------------+ | Variable_name | Value

bestinter2010的博客 4865

Chapter 3 (General Random Variables): Conditioning (条件)

本文为 IntroductionIntroductionIntroduction tototo ProbabilityProbabilityProbability 的读书笔记 目录Conditioning a Random Variable on an Event Conditioning a Random Variable on an Event The conditional PDF of a continuous random variable XXX, given an event AAA wit

连理o的博客 913

Chapter 3 (General Random Variables): The Continuous Bayes‘ Rule (连续贝叶斯准则)

本文为 IntroductionIntroductionIntroduction tototo ProbabilityProbabilityProbability 的读书笔记 目录The Continuous Bayes' RuleInference about a Discrete Random VariableInference Based on Discrete Observations The Continuous Bayes’ Rule fX∣Y(x∣y)=fX(x)fY∣X(y∣x)fY(y)=

连理o的博客 460

CANN/hixl C++通用编码规范

> **Applicable Scope**: The general programming specifications apply to all C++ code. ## Rule List | Rule No. | Rule Name | Category | |---------|---------|------| | 1.1 | Validate external data le

gitblog_00886的博客 1147

基于GCC/Eclipse搭建TI CC26xx/CC13xx无线MCU开源开发环境全攻略

在嵌入式系统开发中,交叉编译工具链是连接主机开发环境与目标硬件平台的核心桥梁。其原理是通过在主机上运行的特殊编译器,将高级语言代码编译为目标处理器架构(如ARM Cortex-M)可执行的机器码。这套基于GNU工具链的开源方案,为开发者提供了从代码编辑、编译、链接到调试的完整掌控能力,具有零成本、高度可定制和便于自动化集成的技术价值。它广泛应用于物联网设备、可穿戴设备和智能家居等对功耗和无线连接有严格要求的场景。本文聚焦于德州仪器(TI)的CC26xx/CC13xx系列超低功耗无线微控制器,详细阐述了如何整

weixin_33743248的博客 438

CC26xx/CC13xx无线MCU GCC/GDB开发环境搭建与调试实战指南

在嵌入式开发领域,GNU工具链(GCC/GDB)因其开源、免费和跨平台的特性,已成为构建自动化工作流和持续集成的基石。其核心原理在于通过交叉编译器将高级语言代码转换为目标架构的机器码,再经由链接器根据内存布局脚本生成可执行文件。这套工具链的技术价值在于提供了对构建过程的完全控制权,便于集成静态分析、单元测试等工程实践。在无线MCU(如TI的CC26xx/CC13xx系列)开发中,结合Eclipse IDE和Make构建系统,可以高效完成从代码编写到烧录调试的全流程。本文聚焦于解决从传统ARM开发环境转向开源

weixin_30340617的博客 416

GitHub 仓库设置里各个菜单的作用、使用场景和底层原理分别是什么?

mainmaster。

长风破浪会有时的博客 936

学习路之mysql--mysql优化,数据库优化

where a=3 and b like 'k%kk%' and c=5 Y,使用到a,b,c。where a=3 and b like 'kk%' and c=5 Y,使用到a,b,c。where a=3 and b like '%kk%' and c=5 Y,使用到a。where a=3 and b like '%kk' and c=5 Y,使用到a。where a=3 and b=5 and c=4 Y,使用到a,b,c。

Green 77

java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_

6765

gys9895的博客 4078

MySQL常见问题汇总

错误原因:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。错误原因:高版本数据库(8.0)转存sql文件,并导入低版本数据库(5.7)公钥不可用,可以使用服务器提供的公钥;不会报错,但会引发SQL注入问题,该方案不可取。方案二:将需要导入的sql文件,把其中的。认证,密码在传输过程中必须使用。错误原因:MySQL的。

欲变世界,先变其身 2万+

SpringBoot 2.6.13整合Flowable 6.8.1与MySQL 8工作流引擎实战

工作流引擎是企业系统开发中的核心组件,Flowable 作为主流开源工作流引擎,支持 BPMN 2.0 规范,能有效处理审批流、会签、驳回等场景。将其与 Spring Boot 和 MySQL 8 集成时,版本兼容、驱动参数、自动建表等细节往往决定落地效率。本方案以 Spring Boot 2.6.13 + Flowable 6.8.1 + MySQL 8 为组合,从 BPMN 流程定义到任务查询与完成,梳理工作流引擎集成路径,并解析 Public Key Retrieval、排序规则冲突、MyBatis

weixin_30899023的博客 273

2021-05-29

mysql学习笔记: percona-toolkit pt-online-schema-change基本原理和命令的使用 该命令经常用于在线DDL操作 例如:现在我们要在线修改一张表的字符集 pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8mb4" D=test,t=z --socket '/tmp/mysql.sock' --password '123456' --execute D参数代表数据库库名 t参数为表名 –sock

Wugeyu的博客 209

MySQL进阶():索引失效、SQL定位及调优(慢查询日志、mysql profile、全日志)

一、索引失效 关于索引跳转链接,在使用索引时,如果避免索引失效?下面综合各种情况来总结: 1.全值匹配最好(即:复合索引的每个列都被作为条件使用了) 2.遵循最佳左前缀法则(若创建的多个列的复合索引,在sql中使用时,若仅使用该复合索引的非第一列,索引会失效;即:必须包含第一列,且中间的列不能丢失,顺序不可颠倒,否则会从断裂点后面的索引列失效) 3.不在索引列上做任何操作(计算、函数\(自动or手动)类型转换),会导致索引失效而转向全表扫描 4.存储引擎不能使用索引中范围条件右边的列(即:范围条件

白骨梦儿 1338
上一篇: 代码大全学习-12-伪码编程(The Pseudocode Programming Process)
下一篇: 代码大全学习-14-变量名的力量(Power of Variables Names)
tyst08
博客等级 码龄19年 1822粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值