`
poson
  • 浏览: 361334 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

入门问题:变量命令规范和变量的放的位置

阅读更多
变量是严格的使用匈牙利命名法么?指在公司,而不是个人写的小程序。
个人不喜欢这种命名,虽然看起来好看。但是很多开源的经典代码读没有这种要求。

循环内部的变量一定要放在循环外部么?记得有人说变量声明尽量靠近变量的使用。

很疑惑,请大家讨论一下公司的标准。
分享到:
评论
8 楼 fineqtbull 2009-12-18  
我只是想说他那个规范很可能是针对C++语言的,有副作用的情况下完全同意你的意见,只是在没有副作用(比如cout的输出)的情况下,比如

引用
循环里的变量放在循环外……?
就是说不会重复构造对象。
只构造一次对象。


很可能就是指在将实体对象变量的定义放在循环外的话将只构造一次。
7 楼 RednaxelaFX 2009-12-18  
fineqtbull 写道
poson说的应该是C++类型的代码吧,也就是对象在堆栈中构建,而不是在堆中。

那也一样,有副作用的东西不能随便移动。如果有
#include <iostream>
using namespace std;

struct Foo {
  Foo() {
    cout << "foo" << endl;
  }
};

int main() {
  for (int i = 0; i < 10; i++) {
    Foo f;
  }
  
  return 0;
}


#include <iostream>
using namespace std;

struct Foo {
  Foo() {
    cout << "foo" << endl;
  }
};

int main() {
  Foo f;
  for (int i = 0; i < 10; i++) {
  }
  
  return 0;
}

显然是不一样的。所以要讨论的话需要一点具体的例子来说明。只是随便说说的话那也罢……
6 楼 fineqtbull 2009-12-18  
poson说的应该是C++类型的代码吧,也就是对象在堆栈中构建,而不是在堆中。
5 楼 RednaxelaFX 2009-12-18  
poson 写道
循环里的变量放在循环外……?
就是说不会重复构造对象。
只构造一次对象。

“构造对象”是潜在有副作用的。编译器能帮忙做的外提只能是循环不变量外提,而且还要保证外提之后原本应该发生副作用的时机得到维持。
不知道poson说的是怎样的代码……写一小段举个例就清楚了。

例如说Java和C#之类的语言要求在访问数组的下标越界时抛异常。而像是:
for (int i = 0; i < N; i++) {
  array[i] = i;
}

这种代码是可以把array.length与N在循环之前比较一次,提前得知在循环中数组访问会不会越界,这样就可以消除在循环中的边界检查,实际上也是一种循环不变量外提。但由于Java和C#里访问数组的正确语义是在真的越界的那次访问时才抛异常,在那之前循环里发生的副作用都应该照旧发生才对,所以在得知某个循环里肯定有越界的数组访问之后,程序也不能说干脆就不执行那个循环而直接抛异常出来。因此不是什么东西都能随便提到循环外面,即便真的是循环不变量也不一定能直接提出去就完事。
4 楼 poson 2009-12-18  
循环里的变量放在循环外……?
就是说不会重复构造对象。
只构造一次对象。
3 楼 RednaxelaFX 2009-12-18  
poson 写道
那看来我们要求的还是很严格的。而且很多地方和标准还是有很多区别的。。
声明在最小使用范围内,gcc编译器会自动做优化么。把循环内的变量,放在循环外。

循环里的变量放在循环外……?
所谓循环不变量代码外提(loop-invariant code motion)是编译器能推导出某个表达式在循环中是不变量时才做的了的,也是这个条件下做了才有意义的。

把变量的scope尽量减小的主要好处应该是减小名字冲突的危险,方便写代码;以及使代码中同一个变量的使用位置尽量集中,方便读代码吧?对编译器来说在哪里声明只是会影响名字查找而已。有些很有效的算法可以把在很前面就初始化、很后面才第一次用的局部变量的初始化给挪到尽量靠近第一次使用处,特别是当控制流简单、易于分析的时候。
2 楼 poson 2009-12-18  
那看来我们要求的还是很严格的。而且很多地方和标准还是有很多区别的。。
声明在最小使用范围内,gcc编译器会自动做优化么。把循环内的变量,放在循环外。
1 楼 myworkfirst 2009-12-18  
   命名有含义就行,其它要求不严格.
  声明变量,主要看他的生命周期了. 如果是局部变量,声明在最小使用范围内,最好了,如果是全局变量,范围大,可以声明类的属性,常理类里了

相关推荐

    wincc中变量的建立简单介绍

    1. **命名规范**:变量名应具有良好的可读性和描述性,避免使用容易混淆的名字。 2. **地址分配**:确保每个变量的地址都是唯一的,并且符合PLC的要求。 3. **性能优化**:合理设置更新周期,避免过度频繁的读写操作...

    MATLAB入门之旅习题整理

    - **命名规范**:变量名需以字母开头,只能包含字母、数字和下划线。 - 示例:`&gt;&gt; A = -2` - 结果:变量A被赋值为-2。 - **大小写敏感性**:MATLAB变量区分大小写。 - 示例:`&gt;&gt; a = 5; &gt;&gt; A = 10;` - 结果:`a`...

    AS400 入门基础及CL命令

    ### AS400 入门基础及CL命令详解 #### CL控制语言——AS400的核心接口 在深入了解AS400系统时,CL(Control Language)控制语言作为用户与操作系统间的关键桥梁,其重要性不言而喻。CL不仅简化了用户管理AS400系统...

    shell从入门到规范电子文档

    3. Shell变量:讲解环境变量、用户变量的设置与使用。 4. 输入/输出重定向:学习如何将输出重定向到文件,或者从文件读取输入。 5. 条件语句和循环:if, elif, else, for, while等控制结构的使用。 6. 函数:创建和...

    matlab零基础入门彩色图像技术:22 matlab调试错误分析.zip

    - 错误信息:MATLAB会显示错误信息,包括错误类型、错误位置和简短描述,这是定位问题的关键。 - `try-catch`结构:用于捕获并处理可能出现的错误,提高程序稳定性。 - `dbstop if error`:设置断点,当出现错误...

    20小时入门学会go语言.docx

    2. 声明变量:可以使用`var`关键字,或使用`=`或`:=`进行简短声明(仅限于局部变量)。 变量初始化与类型推导: 1. 初始化:声明变量的同时进行赋值。 2. 类型推导:Go语言可以根据初始值自动推断变量类型,简化...

    Excel VBA基础入门(PDF)

    ### Excel VBA基础入门知识点详解 #### 一、VBA语言基础 **1.1 标识符** - **定义**: 标识符是用于命名变量、常量、子程序等的基本元素。 - **规则**: 必须以字母开头;长度最长可达255个字符;不能包含特殊符号...

    「Python入门」Python代码规范(风格)

    ### Python入门:Python代码规范(风格) #### 一、编码规范 在Python中,编码规范非常重要,它确保了代码的可读性和一致性。如果Python源码文件没有明确声明编码格式,默认情况下,Python解释器会使用ASCII编码。...

    Linux快速入门

    - **POSIX 标准**:Linux 符合 POSIX 标准,这是一个关于 Unix 系统的国际标准,规定了 Unix 系统的基本行为和接口规范。 #### 二、Linux 的组成 Linux 主要由以下几部分组成: - **内核**:Linux 内核负责管理...

    Excel.VBA从入门到精通

    ### Excel.VBA从入门到精通 #### VBA语言基础 **VBA**(Visual Basic for Applications)是一种由微软公司开发的应用程序级别的编程语言,主要用于Office套件等应用软件中实现自动化控制,提高工作效率。 ##### 一...

    java 入门要注意的问题

    2. 设置环境变量:安装JDK后,需要配置JAVA_HOME、PATH和CLASSPATH三个环境变量,以便系统能够正确识别Java命令。 二、语法基础 1. 关键字与标识符:了解Java中的关键字,如`public`, `private`, `class`等,并理解...

    批处理标准教程.pdf

    - **批处理编程格式**: 包括正确的语法结构和规范。 - **批处理编程实例**: 提供实际应用案例,如清理系统垃圾、文件管理等。 #### 六、专题研究 - **shutdown**: 关机命令的使用方法。 - **加密文件**: 使用批处理...

    shell必学必会命令

    - **变量查看和取消**:使用`echo $VAR_NAME`查看变量值,使用`unset VAR_NAME`取消变量。 - **Shell内置变量**:系统预先定义好的特殊变量,如`$0`(脚本名称)、`$#`(传入脚本的参数数量)等。 #### 三、Shell 进阶 ...

    JAVA小程序(入门小程序集合)

    1. **Java环境配置**:首先,你需要安装Java Development Kit (JDK),并设置好环境变量,包括JAVA_HOME、PATH和CLASSPATH,确保系统能够识别和执行Java命令。 2. ** HelloWorld 程序**:这是每个编程初学者的第一步...

    linux shell编程入门

    ### Linux Shell编程入门知识点 #### 一、Shell概念与作用 - **定义**:Shell作为用户与Linux操作系统之间的重要交互工具,它不仅是一款用C语言编写的程序,更是连接用户和系统的桥梁。用户可以通过Shell输入命令...

    java 新手入门手册

    安装后,还需要配置环境变量,包括JAVA_HOME、PATH和CLASSPATH,确保系统能正确找到Java相关命令。 2. **基础语法**:Java语法与C++和C#相似,包括数据类型(如整型、浮点型、字符型和布尔型)、变量声明、常量定义...

    NET Core 3.1 开发数据文档.pdf

    * 环境变量和 dotnet-install 脚本:学习如何使用环境变量和 dotnet-install 脚本来安装和配置 .NET SDK。 * 遥测和错误消息:了解如何使用遥测和错误消息来诊断和排除 .NET 应用程序中的问题。 CLI 和工具 * .NET...

Global site tag (gtag.js) - Google Analytics