当前位置: 首页 > news >正文

dedecms学校网站网站搭建软件d

dedecms学校网站,网站搭建软件d,wordpress搜索页分页,公司的网站建设注意点目录 1 应对C语言标准变更 2 标识符的名称限制 3 整数的大小 4 字符是有符号整数还是无符号整数 5 移位运算符 6 内存位置0 7 除法运算时发生的截断 1 应对C语言标准变更 使用新特性可以使代码更容易编写且减少错误#xff0c;但可能会导致代码在旧编译器上无法编译。…目录 1 应对C语言标准变更 2 标识符的名称限制 3 整数的大小 4 字符是有符号整数还是无符号整数 5 移位运算符 6 内存位置0 7 除法运算时发生的截断 1 应对C语言标准变更 使用新特性可以使代码更容易编写且减少错误但可能会导致代码在旧编译器上无法编译。square函数是一个简单的数学函数用于计算一个数的平方。在新风格中函数原型明确指定了参数类型如下所示 double square(double x) {return x * x; }如果这样写这个函数在很多编译器上都不能通过编译。如果我们ANSI标准为了保持和以前的用法兼容按照旧风格来重写这个函数这就增强了它的可移植性。但在旧风格中函数原型不包含参数类型这里只举例说明旧标准现在基本不再使用如下所示 double square(x) double x; // 函数参数声明 {return x * x; // 计算x的平方并返回结果 }这种可移植性为了与旧用法保持一致我们必须在调用了square函数的程序中作如下声明 double square() 但是函数square的声明中并没有对参数类型做出说明因此在编译main函数时编译器无法得知函数square的参数类型应该是double还是其他类型。如下面的示例函数调用将会报错。 double square(); main() {printf(g\n,square(3)); }为避免这类问题可在声明中带入参数类型3会被自动转换为double类型 double square(double): main() {printf(g\n,square(3)); }另一种改写的方式是在这个程序中显式地给函数square传入一个double类型的参数 double square(double x); // 显式指定参数类型 main() {printf(%g\n, square(3.0)); // 显式传入double类型的参数 }2 标识符的名称限制 在C语言的不同实现中对标识符的处理方式存在差异。一些实现会接受标识符中的所有字符而另一些实现可能会截断过长的标识符。连接器对外部名称也有特定的限制例如可能只允许使用大写字母。ANSI C标准规定C语言实现至少能够区分外部名称的前6个字符且不区分大小写。 因此为了确保程序的可移植性选择外部标识符的名称时需要谨慎。例如不应使用容易混淆的名称如print_fields和print_float或者State和STATE。例如下面的示例代码 // 定义一个函数 Malloc char Malloc(unsigned n) {char *p;char *malloc(unsigned); // 声明 malloc 函数的原型p malloc(n); // 调用 malloc 函数尝试分配 n 字节的内存if (p NULL) // 如果 malloc 分配失败返回 NULLpanic(out of memory); return p; // 如果分配成功返回分配的内存的指针 }这个程序的意图是在需要分配内存的地方调用Malloc函数而不是直接调用malloc。如果malloc失败panic函数会被调用终止程序并打印错误消息。这样客户程序就不需要在每次调用malloc时都进行检查。 然而如果编译环境是不区分大小写的C语言实现那么函数malloc和Malloc可能会被视为相同导致调用Malloc时实际上是在递归调用自己。在这种情况下程序在第一次尝试分配内存时对Malloc函数的调用将引起一系列递归调用而这些递归调用没有返回点最终导致程序崩溃。 3 整数的大小 C语言提供了三种不同长度的整数类型short、int 和 long以及字符类型。这些类型的长度有以下特点 长度是非递减的即 short ≤ int ≤ long。普通整数int 类型足够大可以容纳任何数组下标。字符长度由硬件决定现代大多数机器的字符长度是8位但有些实现中字符长度可能是16位。 ANSI标准规定 long 至少32位short 和 int 至少16位。这些规定意味着我们不能依赖于具体的位数但可以保证一定的最小长度。 在编程实践中这意味着我们不能依赖于具体的精度而应该根据需要选择合适的类型。例如如果需要存储可能达到千万数量级的数值最好声明为 long 类型。 4 字符是有符号整数还是无符号整数 在C语言中char 类型可以是无符号的或有符号的这取决于编译器的实现。大多数现代编译器将字符实现为8位整数。 字符的符号性当需要将字符值转换为较大的整数时字符是有符号还是无符号的变得重要。如果字符是有符号的转换为 int 时符号位会扩展如果是无符号的则高位会填充0。字符的取值范围如果字符被视为有符号其取值范围是 -128 到 127如果被视为无符号则取值范围是 0 到 255。 为了确保字符被视为无符号整数程序员可以声明 unsigned char。这样无论在什么编译器上字符在转换为整数时多余的位都会被填充为0。 与此相关的一个常见错误认识是如果c是一个字符变量使用(unsigned) c就可得到与c等价的无符号整数。这是会失败的因为在将字符c转换为无符号整数时c将首先被转换为int型整数而此时可能得到非预期的结果。正确的方式是使用语句(unsigned char) c,因为一个unsigned char类型的字符在转换为无符号整数时无需首先转换为int型整数而是直接进行转换。 #include stdio.hint main() {char signedChar -1; // 有符号字符unsigned char unsignedChar 255; // 无符号字符// 打印字符的整数值printf(Signed char as int: %d\n, signedChar);printf(Unsigned char as int: %u\n, unsignedChar);// 正确转换有符号字符为无符号整数printf(Correctly converted signed char as unsigned int: %u\n, (unsigned char)signedChar);return 0; }5 移位运算符 使用移位运算符的程序员经常对这样两个问题感到困惑 1向右移位时的填充问题 对于无符号数空出的位由0填充。对于有符号数C语言实现可能用0或符号位的副本填充。 如果程序员关心向右移位时空出的位可以将变量声明为无符号类型这样空出的位都会被设置为0。 2移位计数的取值范围 移位计数必须大于等于0且小于被移位对象的位数。这个限制确保了移位操作可以在硬件上高效实现。 例如对于32位的整数n 31 和 n 0 是合法的而 n 32 和 n -1 是不合法的。 3移位和除法不完全等同 即使在某些C语言实现中有符号整数的右移会用符号位填充新位这也不等同于除以2的幂。例如(-1) 1 的结果通常不为0但 1 / 2 在大多数C实现中结果为0。 在C语言中对于有符号整数-1 1 的操作结果取决于整数的位数和计算机的架构。对于一个32位的整数 -1 在二进制中通常表示为一个32位的全1的模式即 11111111 11111111 11111111 11111111。当你将 -1 向右移动1位时根据补码规则最左边会填充1符号位扩展结果仍然是 -1。因此在大多数现代计算机上-1 1 的结果是 -1。 如果已知 low high 为非负那么mid (low high) 1; 与 mid (low high) / 2; 完全等效但前者的执行速度要快得多。 6 内存位置0 空指针不指向任何对象使用它除了赋值或比较外都是非法的。例如使用空指针进行strcmp操作会导致未定义行为不同编译器结果可能不同。 某些编译器对内存地址0有硬件级的读保护使用空指针会导致程序立即终止。有些编译器允许读但不允许写内存地址0空指针看似指向字符串但内容可能是无意义的“垃圾信息”。还有些编译器允许读写内存地址0错误使用空指针可能导致覆盖操作系统内容造成严重问题。 在所有C程序中错误使用空指针都是未定义的但可能在某些编译器上“看似”能工作直到换到另一台机器上才会出现问题。 检查这类问题的一个方法是将程序移到不允许读取内存地址0的机器上运行。以下是一个示例程序用于检测C语言实现如何处理内存地址0 #include stdio.hint main() {char *p NULL;printf(Location 0 contains %d\n, *p);return 0; }在禁止读取内存地址0的机器上这个程序会失败。在其他机器上它将打印出内存位置0中存储的字符内容。 7 除法运算时发生的截断 假定我们让q a /br a % b商为q余数为r在整数除法和余数运算中我们希望满足以下三条性质 定义余数的关系a qbr。符号变化改变a的正负号应改变q的符号但不改变q的绝对值。余数范围当b0时希望保证0≤ r b。这对于使用余数作为哈希表索引等场景很重要。 然而这三条性质不可能同时满足。考虑一个简单的例子3/2商为1余数也为1。此时第1条性质满足。(-3)/2的值应该是多少呢如果要满足第2条性质答案应该是-1但如果是这样余数就必定是-1这样第3条性质就无法满足。如果我们首先满足第3条性质即余数是1这种情况下根据第1条性质则商是-2那么第2条性质又无法满足了。 因此C语言或者其他语言在实现整数除法截断运算时必须放弃上述三条原则中的至少一条。大多数程序设计语言选择了放弃第3条而改为要求余数与被除数的正负号相同。这样性质1和性质2就可以得到满足。 然而C语言的定义只保证了性质1以及当a0且b0时保证 |r|b以及r0.后面部分的保证与性质2或者性质3比较起来限制性要弱得多。 C语言的定义虽然有时候会带来不需要的灵活性但大多数时候这个定义对让整数除法运算满足其需要来说还是够用了的。
http://www.hkea.cn/news/14478145/

相关文章:

  • 信阳建设网站哪家好seo网站计划书
  • 洛阳网站建设价格低哪个网站专门做灵异文
  • 新民网站建设价格咨询烟台城乡住房建设厅网站
  • 三亚网站定制开发公司网站在线qq代码
  • 北京专业网站建设网站推广青岛网站排名推广
  • 网站模板安装好后wordpress界面英文
  • 招聘网站制作公司自己制作简易网页
  • 深圳有没有什么网站网站域名详解
  • h5可以做网站吗图书馆网站建设情况
  • 网站建设检查整改情况报告做代账的网站
  • 营口门户网站建设常德网站开发服务
  • 一个做问卷调查的网站好县网站建设运维情况自查报告
  • 网站建设毕业设计任务书企业网站建设咨询
  • 高端网站建设968江西公共资源交易网
  • 谷歌云做网站wordpress博客功能
  • 网站免费建站app杭州网络运营公司排名
  • 手机版网站制作模板咸宁网站建设网络公司
  • 旅游门户网站有哪些现在电商做的设计用的什么网站
  • 长沙网站推广合作做的怎样 英文网站
  • 邯郸网站开发公司在线建设房屋设计网站
  • 个人网站名称怎么取容易备案网站制作可能出现的问题
  • 河南省级住房城乡建设主管部门网站电子商务网站推广策略主要内容
  • 天津滨海新区小程序网站建设优秀设计案例
  • 网站主体负责人不是法人公司网站开发需求文档
  • 小程序开发哪家好关键词排名优化流程
  • 网站添加站长统计代码营销管理系统
  • 咨询北京国互网网站建设优化推广seo
  • 广州公司网站centos wordpress 空白
  • 移动端网站如何建设新赣州房产网
  • 百度商桥代码怎么加到网站上免费空间和域名