ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

详解Dev C++使用教程(使用Dev C++编写C语言程序)

详解Dev C++使用教程(使用Dev C++编写C语言程序) 前言Dev-C 是国内高校 C 语言课上出镜率极高的一个工具。它的好处很直接体积小、装完即用、不用配环境变量点一下就能编译运行一个.c文件。但正因为太好用很多同学用了整整一学期也没搞清楚自己到底在用什么。最常见的三个误解是这样的。第一个是把Dev-C 当成编译器——它不是它只是一个图形界面IDE集成开发环境真正的编译工作交给它捆绑的 GCC 完成。第二个是以为写 C 语言必须先新建项目——单文件的 C 程序直接新建源代码就行只有多文件才需要项目。第三个是以为.c和.cpp没区别——后缀直接决定 Dev-C 调的是gcc还是g也决定了按 C 还是按 C 的语法规则来编译用错了会冒出各种看不懂的报错。本文按先弄清工具构成再写第一个程序最后处理报错的顺序讲一遍重点放在那些真会卡住人的地方中文乱码、scanf返回值、void main、链接错误里的WinMain。文中的 C 代码只使用 C 标准库后缀一律建议保存为.c。一、Dev-C 到底由哪几部分组成把它拆开看一共三层层是什么你能改什么编辑器Dev-C 自带的代码编辑区字体、编码、缩进、自动补全IDE 前端Dev-C 本体最初是 Bloodshed 的作品后用 Delphi/Pascal 写成现在由社区分支维护快捷键、工具栏、项目类型后端编译器捆绑的 GCC 工具链MinGW / TDM-GCC 系列含gcc.exe、g.exe、gdb.exe编译选项、标准版本、优化级别因为 IDE 和编译器是两层所以Dev-C 版本号和GCC 版本号是两回事。怎么查自己的 GCC 版本打开 Dev-C菜单栏「工具」→「编译选项」在弹出的对话框里能看到编译器所在的目录和版本信息也可以在最外层菜单「帮助」→「关于」里看到 IDE 自身的版本。不同发行版捆的编译器差别很大——老版本是 32 位工具链新版本换成了 64 位的 MinGW-w64。所以不要照抄别人博客上的编译器版本号以你自己机器上显示的为准。一个实用结论Dev-C 打开的文件如果是.c后缀它会调用gcc如果是.cpp/.cc/.cxx就调用g。C 语言程序必须存成.c否则g会按 C 规则检查你的代码出现一堆莫名其妙的报错。二、写第一个 C 程序第一步新建文件。菜单「文件」→「新建」→「源代码」快捷键CtrlN。不要选「项目」单文件程序不需要。第二步敲代码。完整的程序如下可以直接复制/* hello.c —— 第一个 Dev-C C 程序 */ #include stdio.h int main(void) { printf(Hello, Dev-C!\n); return 0; }第三步保存。CtrlS文件名为hello.c注意后缀一定要是.c。Dev-C 默认保存成系统 ANSI 编码在简体中文 Windows 上就是 GBK这个默认值对写中文注释最友好先别改。第四步编译运行。菜单「运行」里有三项对应快捷键菜单项快捷键做什么编译F9只编译生成.exe不运行运行F10运行上次编译出的.exe编译并运行F11上面两步合起来日常最常用快捷键以「运行」菜单里实际显示的为准也可以在「工具」→「快捷键」里自行修改。按F11会弹出一个黑色控制台窗口显示Hello, Dev-C!。这个窗口通常带着Process exited after ... seconds with return value 0这样的结束语——那是 Dev-C 自己加的包装对应return 0不是程序输出的一部分。多文件才需要项目。如果程序分成main.c和func.c两个文件就必须「文件」→「新建」→「项目」→「Console Application」选 C 语言然后把两个文件都加进项目里再点「编译并运行」。此时 Dev-C 会生成一个 Makefile编译和链接都由它驱动。再给一个带输入输出的完整例子练手用/* sum.c —— 读入两个整数并求和 */ #include stdio.h int main(void) { int a 0; int b 0; printf(请输入两个整数用空格或回车分隔: ); /* scanf 返回成功读入的项数用它判断输入是否合法 */ if (scanf(%d %d, a, b) ! 2) { fprintf(stderr, 输入格式不正确\n); return 1; } printf(%d %d %d\n, a, b, a b); return 0; }三、编译选项把警告打开Dev-C 默认的警告级别很低很多潜在 bug 会静悄悄地溜过去。建议从第一天起就把警告打开。路径是菜单「工具」→「编译选项」→「编译器」页。不同版本的界面对不上是很正常的事常见的有两种做法有的版本在「代码生成/优化」页有一个语言标准-std的下拉框选ISO C11或GNU C11即可。更保险的做法是找到「在编译时加入以下命令」这个输入框直接手填-stdc11 -Wall -Wextra-stdc11指定语言标准-Wall -Wextra打开常用警告。填完勾选启用重新编译一次即可生效。为什么一定要开警告C 语言里有一大类 bug 不报错、只警告比如把写成、printf的格式串和参数类型不匹配、函数声明和定义不一致。这些在默认警告级别下可能什么都不提示。想看 C 标准里各版本对同一段代码的反应可以在源码里用__STDC_VERSION__宏确认当前生效的标准#include stdio.h int main(void) { #if defined(__STDC_VERSION__) printf(__STDC_VERSION__ %ldL\n, (long)__STDC_VERSION__); #else printf(未定义 __STDC_VERSION__可能是 C89 模式\n); #endif return 0; }C11 对应201112LC99 对应199901LC17 对应201710L。跑一下就知道-stdc11到底有没有生效。四、常见报错的成因与排查Dev-C 下方有一个「编译器」标签页报错都在那里。它显示的是 GCC 的原始输出格式是「文件名:行号: 错误/警告: 说明」。这里列几类高频错误报错片段真实含义排查方向expected ; before } token上一行缺分号报错行的前一行才是问题所在xxx undeclared变量名写错或没定义检查拼写与作用域implicit declaration of function printf缺#include stdio.h补上头文件undefined reference to WinMain找不到main链接器退而求其次找图形程序入口main是否拼成了mian项目类型是不是选成了 Win32 GUIstray \xxx in program全角标点混进了代码中文分号、中文引号、中文括号[Error] ld returned 1 exit status链接阶段失败上面一定有更具体的一行往上翻别盯着这一行看最后一条尤其要强调ld returned 1 exit status是结论不是原因真正的错误在它上面常见的是重复定义函数或拼错了函数名。常见坑点1. 中文乱码源码用 UTF-8 存控制台按 GBK 显示/* ❌ 源码以 UTF-8 保存控制台代码页 936printf 出来是乱码 */ printf(你好世界\n); /* ✅ 方案一Dev-C 里「另存为」时编码选 ANSIGBK */ /* ✅ 方案二Windows 上先切代码页需要 #include stdlib.h */ system(chcp 65001 nul); printf(你好世界\n);system是标准库函数stdlib.h但chcp命令本身是 Windows 专有的这段代码在 Linux 上跑不了。2. 用了scanf却不检查返回值int a; scanf(%d, a); /* ❌ 输入 abc 时 a 保持未定义/原值后续逻辑全错 */ if (scanf(%d, a) ! 1) { /* ✅ 用返回值判断 */ fprintf(stderr, 输入非法\n); return 1; }3.void main是非标准写法void main(void) { } /* ❌ 标准要求 main 返回 intGCC 会报错或警告 */ int main(void) { return 0; } /* ✅ */4. 用gets读一行字符串char buf[64]; gets(buf); /* ❌ C11 已把 gets 从标准中移除且无法防缓冲区溢出 */ fgets(buf, sizeof buf, stdin); /* ✅ 带长度上限 */5. 以为.c和.cpp一样hello.c - gcc 编译C 规则 hello.cpp - g 编译C 规则/* ❌ 存成 .cpp 后malloc 的返回值不再能隐式转成 int*且会启用 C 的重载规则 */ int *p malloc(sizeof(int)); /* ✅ C 程序就老老实实存成 .c并用 malloc 时带上 #include stdlib.h */6.printf格式串与参数类型不匹配double d 3.5; printf(%d\n, d); /* ❌ 格式串是 %d 却传 doubleUB输出是无意义的数 */ printf(%f\n, d); /* ✅ */7. 双层引号把\n变没了printf(\n); /* ✅ 换行 */ printf(\\n); /* ❌ 输出的是反斜杠加字母 n */8. 项目类型选错导致的WinMain链接错误❌ 新建项目时选了 Windows Application图形程序单文件里又只有 main - undefined reference to WinMain ✅ 新建项目时选 Console Application编译出的程序才会带黑色控制台窗口总结事项结论Dev-C 的身份IDE不是编译器编译器是它捆绑的 GCCMinGW / TDM-GCC 系列版本怎么查「工具」→「编译选项」看编译器目录与版本「帮助」→「关于」看 IDE 版本单文件「文件」→「新建」→「源代码」存成.c多文件「文件」→「新建」→「项目」→ Console Application常用快捷键F9编译、F10运行、F11编译并运行推荐编译选项在「编译时加入以下命令」填-stdc11 -Wall -Wextra中文乱码源码存 ANSIGBK或先执行chcp 65001报错怎么看从上往下看第一条ld returned 1 exit status只是结论用 Dev-C 学 C最值得养成的两个习惯是保存时盯一眼后缀是不是.c以及把警告开到-Wall -Wextra并认真读每一条警告。这两件事能挡掉初学阶段绝大部分能编译但结果不对的问题。等到需要多文件、需要调试器、需要更严格的标准检查时再考虑换成 VS Code 加 GCC、或 Visual Studio那时你已经知道底层在发生什么了。
返回列表