C语言学习_C Primer Plus:关于声明变量和printf的先后问题
来源:互联网 发布:linux ftp命令 带端口 编辑:程序博客网 时间:2024/06/15 17:57
编写2.12程序练习时发现,
如果在声明变量语句前面有printf语句:
/* 2_12.c -- 编写程序打印姓名,目的是使用printf */#include <stdio.h>int main(void){/* 第一题 */printf("Zhang Qiu!\n");printf("Zhang \nQiu!\n");printf("Zhang ");printf("Qiu!\n");/* 第二题 */printf("My name is Zhang Qiu.My address is China.");/* 第三题 */int age_year;int age_day;age_year = 24;age_day = age_year * 365;printf("My age is %d year,%d day.",age_year,age_day);/* 第四题 */getchar();return 0;}
则编译器(我所使用的是 vs2010)会报错:
“错误 4 error C2065: “age_day”: 未声明的标识符 e:\vscode\cc++\c_primerplus\2_homework\2_homework\2_12\2_12\2_12.c19”
上网查了一下,发现大部分都说是编译器的问题。
贴一个百度贴吧的解答:
这是C89的规定,代码更加易于阅读,而且编译器也更容易实现最大限度的优化。不过C99支持变量在语句后声明了,你可以使用支持C99的编译器(GCC等),或者使用支持C++的编译器(VS系列,CPP扩展名)
有个博客是详细说明问题原因并分析利弊的,在此记录一下:
文章标题:C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
文章链接:http://www.cnblogs.com/web-HCJ/p/4468689.html
问题根源:编译器问题——C89和C99
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
阅读全文
0 0
- C语言学习_C Primer Plus:关于声明变量和printf的先后问题
- C Primer Plus-printf和scanf
- 《C Primer Plus》学习笔记之 C数据的属性(零)常量和变量
- c primer plus 14.13 奇特的声明
- C Primer Plus学习 三十六 寄存器变量
- C Primer Plus学习 五 研究和利用printf ()和scanf ()
- [翻译]定义和声明的区别--from《C.Plus.Plus.Primer.4th.Edition》
- [翻译]定义和声明的区别--from《C.Plus.Plus.Primer.4th.Edition》
- 关于c语言的printf()问题
- [C] printf()和scanf()的*修饰符——《C Primer Plus》
- C 语言变量的声明和定义
- c语言变量的声明和定义
- [C++ Primer Plus]学习笔记--关于C++ string和c类型字符数组的对比
- 关于C语言中printf()变量++/--输出值得注意的问题
- C Primer Plus 学习中的问题
- C语言 没有变量名的变量声明和使用
- C Primer Plus学习
- 【c语言问题系列教程之一】变量声明和初始化
- 有对象的程序猿都是怎么写代码的
- hdu 4430 枚举+二分 范围运算失误
- Python3.x中出现 "AttributeError: module 'urllib' has no attribute 'urlopen'" 的解决方法
- 几个性能测试工具
- 数据库审核系统和防统方系统的异同
- C语言学习_C Primer Plus:关于声明变量和printf的先后问题
- CentOS-CentOS版本查询命令
- 图像局部不变性特征提取与描述
- Netty的高性能及NIO的epoll空轮询bug
- 【Spring】Spring Framework Reference Documentation中文版24
- python3中模块详解--os模块和sys模块
- APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念
- p4常用命令
- java 通过FreeMarker导出数据库结构word文档