VC++运行C程序的基本方法_第1页
VC++运行C程序的基本方法_第2页
VC++运行C程序的基本方法_第3页
VC++运行C程序的基本方法_第4页
VC++运行C程序的基本方法_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附附录录 A C 程程序序的的基基本本开开发发过过程程 C 语言程序开发涉及到四个过程 编辑 编译 连接 装载并运行 这些单词所表达的意 义我们可以慢慢体会 下面首要的是学会依葫芦画瓢 学会按照下面的方法在 VC 环境下 建立一个工程 编辑源文件 编译 调试 装载并运行程序 在 Windows 操作系统下 VC 环境的基本使用方法如下 详细的调试方法可参阅相关资料 或者参阅微软 MSDN 帮助文 件 A 1 安安装装程程序序 VC 环境的安装请参阅相关的安装程序说明 双击 setup 文件 然后根据提示 一路 next 就可以了 A 2 新新建建一一个个工工程程 新新建建一一个个源源文文件件 添添加加源源文文件件到到工工程程 1 首先请在 F 盘 或其他盘 上建立文件夹 TEST 以便将待建的 C 程序工程文件 project 等 相关文件放置在该文件夹中 2 新建一个工程 project 首先鼠标左键单击 文件 菜单 选择 新建 单击鼠标左键 系统将弹出一个窗口 单击 工程 选项 将得到图 A 1 所示窗口 请在 位置 栏填入刚才所建的目录 F TEST 可以是自 己设定的其他目录 并在 工程名称 栏填入 project 可以是自己命名的其他工程名 然后 鼠标左键单击左边窗口倒数第三项 Win32 Console Application 使该项变蓝 然后鼠标左键 单击 确定 按钮 得到图 A 2 所示窗口 选择 一个空工程 单击 完成 得到图 A 3 再单击 确定 得到图 A 4 所示的窗口 鼠标左键单击右下角的 FileView 字样 再单击 project files 左边的 号 在其下面的工作空间将出现三个文件夹 Source Files Header Files Resource Files 如图 A 5 所示 此时尚无浮动菜单 图 A 1 图 A 2图 A 3 图 A 4 图 A 5 3 新建一个源文件 hello c 要新建一个 C 程序源文件可以选择 文件 菜单的 新建 选项 在弹出的窗口中选择 文 件 选项单击 得到如图 A 6 所示的窗口 其 位置 栏中的内容是默认的 在 添加到工程 前 打勾 工程名 project 也是默认的 但但 文件名文件名 一栏中的内容需要自己填写 且必须是以一栏中的内容需要自己填写 且必须是以 c c 为后缀 比如图中的为后缀 比如图中的 hello chello c 注 该栏的内容一定要以 注 该栏的内容一定要以 c c 为后缀 否则系统会默认为为后缀 否则系统会默认为 cppcpp 这样编译时就会调用 这样编译时就会调用 C C 的编译器 而我们需要调用的编译器 而我们需要调用 C C 语言的编译器 语言的编译器 然后在左边 选项中选中 C Source File 选项 单击 确定 按钮 就得到了 hello c 文件 此时 右边文件 区变白 我们就可以在文件区添加源程序代码了 如图 A 8 所示 此时 左边的工作空间的 Source Files 文件夹前将出现一个 号 单击 号 其下将出现 hello c 文件 在 hello c 文 件中编制源文件将得到如图 A 8 所示的结果 图 A 6图 A 7 图 A 8 4 添加一个源文件到工程 鼠标右键单击 Source Files 文件夹 将弹出如图 A 5 所示的浮动菜单 拖动鼠标到 添 加文件到目录 选项 单击鼠标左键弹出 插入文件到工程 选窗口 选择好正确的源文件 单 击 确定 按钮 该源文件将添加到 Source Files 目录 如添加成功 Source Files 文件夹前面 将出现一个 号 鼠标左键单击加号将看到刚才添加的源文件出现在 Source Files 文件夹 下面 鼠标左键双击该文件 该文件的内容将显示在右边的文件区 此时就可以编辑该源文 件了 注 采用前述第 3 条方法生成的源文件 hello c 不需要添加操作 因为在生成它时 它 已经自动添加到了 project 工程 A 3 编编译译 连连接接 运运行行 调调试试一一个个程程序序 当源文件编辑完成后 就可以编译 连接和运行程序了 方法如下 单击 组建 菜单的 编译 选项 将完成编译工作得到 obj 目标文件 文件名就是源文 件的名字 编译结果将在窗口最下面的输出窗口显示 可根据窗口的提示修改源文件以改 正错误 单击 组建 菜单的 组建 选项 完成连接工作得到 project exe 可执行文件 文件名是工 程名 连接的结果也将在窗口最下面的输出窗口显示 单击 组建 菜单的 全部重建 选项 将完成编译和连接两项工作 编译和连接的结果将 在输出窗口显示 单击 组建 菜单的 执行 选项 可运行程序 project exe 程序运行的结果如图 A 7 所示 另外 单击 组建 菜单的 开始调试 选项 然后交替按下 F11 和 F10 快捷键可以完成程 序的单步调试工作 调试方法大家可以逐步摸索 慢慢体会 多试试自然就熟悉了 不要怕 出错误 经验是在错误中不断学习的 A 4 输输出出窗窗口口的的常常见见错错误误提提示示 在教学中 同学们在遇到编译 连接和运行错误提示时常常不知道其含义 下面罗列一 下一些常见的错误 以帮助大家上机操作 为了方便 我们采用了 倒推 的方式 我们将例 题 2 2 的程序做一点简单修改 看看将会出现的错误和警告提示 注 我们将例题中的 a 10 和 b 20 两语句改为用 scanf d d b 20 两语句删除 并在该位置添加以下二语句 printf Please input a b 在屏幕上显示提示语 提示下一步的操作 scanf d d 调用 scanf 函数输入 a 和 b 的值 这样程序将如下所示 文件名 s2 2 c 比较两个整数的大小 欢迎登陆 C C 教学网站 include 文件包含预处理命令 include 文件包含预处理命令 int Max int x int y 函数声明语句 int main void 主函数 main void int a b c 变量定义语句 定义了三个变量 a b c printf Please input a b 在屏幕上显示提示语 提示下一步的操作 scanf d d 调用 scanf 函数输入 a 和 b 的值 c Max a b 函数调用语句 调用自定义函数 Max 并将其返回值赋给 c printf Max a b d n c 调用在 stdio h 中声明的库函数 printf 输出系统提示并返回操作系统 system PAUSE 调用库函数 system return 0 返回值 0 返回操作系统 下面是 Max 用户自定义函数的函数定义部分 满足函数定义的语法格式要求就是函数 int Max int x int y 函数头部分 x 和 y 为形式参数 两个外层大括弧之间的内容为函数体部分 int z 变量定义语句 定义了变量 z if x y 分支语句 如果 x y 成立 将 x 的值赋给 z 否则将 y 的值赋给 z z x 将 x 的值赋值给 z 变量 else z y 将 y 的值赋值给 z 变量 return z 函数返回语句 函数返回主调函数并将 z 的值一并返回 点击 组建 菜单的 全部重建 按钮 执行编译 连接后 输出窗口将有如下显示 Configuration project Win32 Debug Compiling s2 2 c Linking project exe 0 error s 0 warning s 表示编译 连接正确出现 0 个错误 0 个警告 此时点击 组建 菜单的 执行 project exe 按钮 程序开始执行 系统弹出一个 Dos 控制台界面窗口 输出提示语 Please input a b 如图 A 9 所示 此时 输入 10 20 注 逗号为半角逗号 并按下回车 那么 10 将赋值给 a 20 将赋值给 b 同时输出窗口将显示 Max a b 20 表明运行正常 并求到了 a 和 b 的最大值 如图 A 10 所示 图 A 9图 A 10 2 输入非半角逗号导致结果不正确 在出现 Please input a b 的时候 输入 10 20 全角逗号 此时系统输出为 Max a b 10 结果并不是希望的 20 原因是 20 并未输入给 b 在 scanf 的输入格式控制字符串 中的两个 d 和 d 之间有一个半角逗号 必须原样输入 上述输入中系统并未接收到半角逗 号所以 20 也就不可能输入给 b 另外 如果在输入时输入 10 20 中间无半角逗号 只有空格 也会得到同样的结果 当我们将 scanf d d 改为 scanf d d 时 此时就可以在输 入时用空格来分隔两个输入的整数 3 在 main 函数前面将函数声明语句 int Max int x int y 注释掉 单击 组建 菜单的 编译 按钮 此时将会出现如下编译结果提示 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 16 warning C4013 Max undefined assuming extern returning int s2 2 obj 0 error s 0 warning s 出现了 C4013 警告 它通知 Max 函数标识符未定义 并假定其返回 int 型数据类型 在 C89 中 系统还可以假定它返回 int 本题看起来也是正确的 但假设 Max 函数本身返回的不 是 int 而是 double 系统的这种假定就错误了 另外 C99 中 所有的函数在使用前都应声明 main 函数除外 所以请养成习惯 使用前先对函数进行声明 4 在 main 函数前面将函数声明语句 int Max int x int y 改为 double Max int x int y 单击 组建 菜单的 编译 按钮 此时将会出现如下编译结果提示 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 16 warning C4244 conversion from double to int possible loss of data F test project s2 2 c 26 error C2371 Max redefinition different basic types F test project s2 2 c 7 see declaration of Max 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s 系统报告了一个警告和一个错误 鼠标左键双击输出窗口的 C4244 警告 将在程序窗口 出现一个蓝色箭头指向警告所在行 说明错误就在该行或者该行附近 在 c Max a b 语 句中 c 是 int 型而 Max 的返回值被声明为 double 型 所以系统警告说 从 double 赋值给 int 进行的赋值转换 将可能引起数据丢失 鼠标左键双击 C2371 错误提示 将在程序窗口出 现一个蓝色箭头指向错误所在行 说明错误可能就在该行 该错误提示说明 Max 重复定 义了 事实上我们在声明时 Max 返回 double 而在定义时返回 int 所以系统认为这是两个 不同的定义 而且名字又相同 当然是重复定义了 将声明语句的 daouble 改回 int 即可 C2371 下面一句是提示我们查找错误的线索 请参阅 Max 的声明语句 鼠标左键双击 它 程序窗口的蓝色箭头就会出现在该声明语句前面 提示语 执行 cl exe 时出错 是告诉我们编译出错了 在 VC 环境中 cl exe 和 link exe 分别是对应编译功能和连接功能的执行文件 当程序中有语法错误 在执行编译时 系统就 会提示 执行 cl exe 时出错 当执行连接操作时 出现谅解错误时 系统将报告 执行 link exe 时出错 4 函数调用时 在实参前面错误增加数据类型说明 比如将 c Max a b 语句改为 c Max int a int b 系统输出窗口显示如下 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 16 error C2143 syntax error missing before type F test project s2 2 c 16 error C2198 Max too few actual parameters F test project s2 2 c 16 error C2059 syntax error 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s 鼠标左键双击错误 c2134 c2198 或 c2059 蓝色肩头都将出现在 c Max int a int b 语句左边 说明是该语句的错误 在函数定义和函数声明中所有形式参数前都应该有类型说 明 但是在函数调用时 在实参前面则不能加类型说明了 因为编译系统早已知道了实参的 类型 5 函数调用时 实参与形式参数个数和类型不匹配 把 c Max a b 语句改为 c Max a 系统输出窗口显示如下 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 16 error C2198 Max too few actual parameters 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s 错误 C2198 提示 Max 实际参数过少 函数需要两个参数 实际只给了一个参数 自然 参数不匹配 6 函数调用时 实参与形式参数个数和类型不匹配 c Max a b 语句改为 c Max a a a 将出现以下错误提示 F test project s2 2 c 16 warning C4020 Max too many actual parameters 错误 C4020 提示 Max 实际参数过多 7 在 main 函数中将语句 scanf d d 改为 scanf d d a b 系统输出窗口显示如下 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 14 warning C4700 local variable b used without having been initialized F test project s2 2 c 14 warning C4700 local variable a used without having been initialized s2 2 obj 0 error s 0 warning s 警告 C4700 提示 变量 a b 未经初始化就使用 此时虽然未报告错误 但是实际上程序 是不能运行的 运行程序时 在系统提示 Please input a b 后 从键盘输入的值 10 和 20 将 不可能输入给 a 和 b 并且系统弹出如图 A 11 所示的错误提示框 表明内存错误 因为 scanf 的输入项应该是地址项 对于一般变量必须通过 系统输出窗口显示将同第 7 点 出现警告 C4700 提示 变量 a b 未经初始化就使用 但 这种情况下 程序能够运行 只是运行的结果莫名其妙 如下 Please input a b Max a b 结果并不正确 因为 a 和 b 没有一个确定值 结果无意义 9 在 main 函数中将语句 scanf d d 改为 scanf f f 此时点击 组建 菜单的 全部构建 按钮 系统不会出现任何警告或者错误提示 表明编 译和连接都已经正常通过 但是运行时却出现如图 A 12 所示的错误提示 它表明了一种运 行时错误 这主要是由于输入格式不对应 a 和 b 本为 int 类型 我们却以浮点型去输入当然 是错误的 而 C 语言是有比较严格类型检查的 当我们将 scanf d d 改为 scanf l l 时 同样得不到正确 的结果 因为长整型的格式控制字符串是 ld 而不是 l 改为 scanf ld ld 则 可以 10 注释掉 include 编译 连接时系统将出现如下警告提示 Configuration project Win32 Debug Compiling s2 2 c f test project s2 2 c 13 warning C4013 printf undefined assuming extern returning int f test project s2 2 c 14 warning C4013 scanf undefined assuming extern returning int s2 2 obj 0 error s 0 warning s 警告 C4013 printf 和 scanf 未定义 这两个函数是系统库函数 由编译器生产厂家提供 在头文件中声明 因此要想使用它们必须在源文件中用包含预处理命令 include 将它们包含进源文件 否则 系统在编译时将发出上述警告 虽然执行连接操作时 能够正确连接 系统运行也能够正确调用 printf 和 scanf 函数 但是请大家记住该包含预 处理命令是每一个程序都应该包含的 文件中还定义了许多有用的东西 11 在 main 函数中将语句 int a b c 注释掉 编译时将得到以下结果 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 14 error C2065 a undeclared identifier F test project s2 2 c 14 error C2065 b undeclared identifier F test project s2 2 c 16 error C2065 c undeclared identifier 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s 它表明 a b c 三个标识符没有定义 变量必须先定义 然后才能使用 12 在 main 函数中将语句 int a b c 的分号去掉 编译时将出现以下错误提示 F test project s2 2 c 13 error C2146 syntax error missing before identifier printf C2146 错误 在 printf 前丢失分号 13 将 Max 函数的 if x y 改为 if x y 编译时将出现如下错误提示 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 33 error C2181 illegal else without matching if 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s C2181 错误 非法 else 没有与其匹配的 if 因为在 if x y 后面加上分号后 它就变成 了一个完整的单分支 if 语句 分号就是一个空语句 它的语句体就是该空语句 这样后面的 else 就没有配套的 if 了 所以出错 14 将 Max 函数的 return z 语句注释掉 编译时将出现如下错误提示 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 39 warning C4716 Max must return a value s2 2 obj 0 error s 0 warning s 警告 C4716 提示 Max 函数必须返回一个值 鼠标左键双击该警告 程序中 Max 函 数定义体的右大括符所在一行将出现蓝色箭头 表示到此为止还没有 return 语句 15 在 main 函数中将语句 printf Max a b d n c 改为 printf Max a b d n 此时 编译 连接都正确 但是输出结果却不正确 因为 d 占位符根本就没有对应的输 出项 自然不会有任何输出结果 16 在 main 函数中将语句 printf Max a b d n c 改为 printf Max a b f n c 此时 编译 连接都正确 但是会出现第 9 条的运行时错误 原因就是类型不匹配 所 以 C 语言程序需要特别注意输入输出格式和数据类型的严格匹配 17 在 Max 的定义体部分 在其函数头部增加分号 变为 int Max int x int y 此时 编译将报错 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 26 error C2449 found at file scope missing function header F test project s2 2 c 39 error C2059 syntax error 执行 cl exe 时出错 project exe 1 error s 0 warning s 错误 C2449 表明在文件范围内丢失文件头 事实上 它把 int Max int x int y 当成了 一个独立的函数声明语句 这样其后的函数体自然就没有了函数头 所以报错 18 当我们去掉 main 函数前的函数声明语句 int Max int x int y 后面的分号时 此时 编译将不能够通过 将报告如下错误 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 10 error C2085 main not in formal parameter list F test project s2 2 c 10 error C2143 syntax error missing before F test project s2 2 c 26 error C2084 function int cdecl Max int int already has a body 执行 cl exe 时出错 s2 2 obj 1 error s 0 warning s 这样 系统将会把该 Max 视为函数定义 所以它会认为 main 应该是函数体的一个 语句 丢失了分号 而且后面居然还有 Max 函数体定义 自然被认为重复定义 而事实上 我们只是丢失了一个分号 19 假设将语句 scanf d d 用以下两语句取代 a getchar b getchar 取代 此时 编译 连接都会正常通过 但是请特别注意输入的使用 假设想将 65 赋值给 a 将 66 赋值给 b 在出现 Please input a b 时 正确的输入应该 是连续输入 AB 并回车 绝对不能输入 A 空格 B 回车 这样赋值给 b 的将是空格 也不能 输入 A 回车 B 回车 这样赋值给 b 的将是回车 此后比较的结果自然不正确 20 假设将 c Max a b 语句改为 c Max1 a b 此时将出现如下编译 连接警告和错误提示 Configuration project Win32 Debug Compiling s2 2 c F test project s2 2 c 16 warning C4013 Max1 undefined assuming extern returning int Linking s2 2 obj error LNK2001 unresolved external symbol Max1 Debug project exe fatal error LNK1120 1 unresolved externals 执行 link exe 时出错 project exe 1 error s 0 warning s C4013 警告表明 Max1 标识符未定义 LNK2001 错误表明不能够解析外部标识符 Max1 因为 Max1 在本文件中找不到定义 所以系统会认为它是一个在别的源文件中定义的外部标识符 但是无法解析该外部标识符 所以无法连接 出现致命的 LNK1120 错误 link exe 是连接操作的执行文件 由于无法解析标识符 所以系统报告 执行 link exe 时 出错 该错误看起来很幼稚 但是我们在编程时却经常出现类似错误 原因多半是由于函数名 变量名等标识符前后不一致造成的 有同学经常大小写不分 l 和 1 不分 0 和 o 不分 造成书写错误 21 把 int main void 头部改为 int mian void 看看编译 连接时有什么反映 编译将正常通过 但连接却会报告如下错误 Configuration project Win32 Debug Linking LIBCD lib crt0 obj error LNK2001 unresolved external symbol main Debug project exe fatal error LNK1120 1 unresolved externals 执行 link exe 时出错 project exe 1 error s 0 warning s 系统报告无法解析外部标识符 main 因为每个 C 程序都必须有一个 main 函数 在本 程序中错把 main 写为了 mian 系统自然找不到 main 所以只好到其他源文件中去找 依然 找不到 所以报告无法解析外部标识符 main 曾有不止一个同学在执行 s2 1 c 程序时 信誓旦旦的告诉我 陈老师 我的程序绝对和 书上的一模一样 没有任何不同 可就是通不过 不知道是何原因 人们从来不相信自己 会把 main 写成 mian 22 将 main 函数中的语句 int a b c 改为 int a b c d 系统编译时将出现以下警告 F test project s2 2 c 11 warning C4101 d unreferenced local variable 它提示 C4101 警告 d 局部变量 实际就是内部变量 未引用 也就是说该变量定义后不 曾使用 实际编程时 一般的警告都不足以引起致命错误 但是建议大家还是要高度重视警告 它是程序出现 bug 的重要提示信息 最好将程序中的所有警告都消除 以增强程序的正确性 23 请将 hello c 文件和 s2 2 文件同时添加到 Source Files 文件夹中 首先执行编译 然后执 行连接操作 编译时 系统不会提示任何错误 编译通过 因为 hello

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论