VS2019教程(使用VS2019编写C语言程序)
接下来《VS2019下载地址和安装教程》,本节将介绍如何使用VS2019编写和运行C语言程序。
例如,在VS2019中编写并运行以下C语言代码:
#包括
int main()
{
put("C语言");
返回0;
}
您需要执行以下步骤。
1。创建项目
打开VS2019,进入如下界面:
图1 VS2019启动界面
选择“Continue without code”,进入VS主界面,如下图:
图2 VS2019主界面
在菜单中选择“文件->新建->项目”,会弹出如下窗口:
图3 创建空项目
选择“空项目”,点击“下一步”,进入“配置空项目”窗口,如下图:
图4 配置空项目
这里可以自定义项目的名称和存储位置,然后点击“创建”按钮即可成功创建一个空项目,如下图:
图5 创建MyDemo空项目
2。添加源文件
右键单击“源文件”,在弹出的菜单中选择“添加-->新建项”,如下图:
图6 添加源文件
在弹出的窗口中选择“C++文件”,修改新文件的名称(比如我创建的源文件是demo.c),如下图:
图7 自定义源文件
点击“添加”按钮,成功创建名为demo.c的源文件,如下图:
图8 C语言源文件成功创建
3。编写代码并运行程序
将本文开头的C语言程序添加到图8所示的demo.c文件中,如下所示:
图9 编辑源码
点击“Local Windows Debugger”开始运行demo.c文件,如下图:
图10 运行程序
总结
现在,您可以与您的朋友分享MyDemo.exe,并告诉他们这是您编写的第一个C语言程序。虽然这个程序很简单,但是你已经通过了第一道坎,学会了如何编写代码以及如何将代码变成可执行程序。这是一次完整的体验。
在本教程的基础部分,我们将教你编写的程序都是这样的“黑窗口”。与我们平时使用的软件不同,它们没有漂亮的界面,也没有复杂的功能。只能看到部分文字。这就是控制台应用程序(Console Application),它和DOS很相似,早期的计算机程序都是这样的。
控制台程序虽然看起来比较枯燥,但是非常简单,适合入门,让大家学习编程的基础知识;只有巩固基本技能,才能开发出健壮的GUI(图形用户界面)程序。即具有接口的程序。
目录
1。什么是调试?它有多重要?
2.?调试的基本步骤?
3。调试和发布简介。
4。常用调试快捷键
4.1 调试时查看程序当前信息
1 查看临时变量的值
2 查看内存信息?
?3 查看调用堆栈
4 查看编译信息
?5 查看注册信息
5。一些调试示例
?6。如何编写好的(易于调试)代码。
6.1 优秀代码:
6.2 演示编写合格的代码
6.3 const
的作用7。常见的编程错误
7.1 编译错误
7.2 链接错误
7.3 运行时错误
1。什么是调试?它有多重要?
调试就是为了发现bug(bug就是我们的程序出错的原因)。
发生的一切都必须是可追溯的。如果问心无愧,就没有必要掩盖,也不会有任何痕迹。如果你问心无愧,
必须掩盖,那就一定有迹象。迹象越多,就越容易跟上趋势。这就是推理的方式。
沿着这条路顺流而下是犯罪,逆流而上才是真理。
一个好的程序员就是一个好的侦探。
每一次调试都是试图破案的过程。
2.?调试的基本步骤?
发现程序存在错误
通过隔离、消除等方式定位错误。
确定错误原因
提出纠正错误的解决方案
纠正程序错误并重新测试
3。调试和发布简介。
Debug常称为debug版本(程序员版本)
,包含了调试信息,并且没有做任何优化,方便程序员调试程序。
Release称为发布版本(用户版本)
,它经常会进行各种优化,让程序在代码大小和运行速度上达到最
。非常适合用户使用。
以以下代购为例:
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
arr[i] = i;
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
返回0;
}
?对比Debug版本和Release版本的代码,可以发现Release版本的代码的可执行文件比Debug版本的要小
选择Debug调试代码,选择Release不调试代码
4。常用调试快捷键
本文使用的IDE是VS2019。我们将在VS2019中调试
最常用的快捷键:
F5
开始调试,常用于直接跳到下一个
断点。
F9
创建断点和取消断点
断点的重要作用是可以在程序的任意位置设置断点。
这允许程序在所需位置停止执行并继续逐步执行。
F10
Process-by-process,通常用于处理一个进程。过程可以是函数调用或语句。
F11
Statement by statements就是每次执行一条语句,但是这个快捷键可以让我们的执行逻辑进入到函数中(
这是最常用的
)。
CTRL + F5
无需调试即可开始执行。如果你想让程序直接运行而不需要调试,可以直接使用。
4.1 调试时查看程序当前信息
1 查看临时变量
的值?
2 查看内存信息?
?
?3 查看调用堆栈
4 查看编译信息
第一种方法:
?第二种方法:
?5 查看注册信息
5。一些调试示例
1。示例1:实现代码:查找
1
!
+2
!
+3
!
...+ n!
;不考虑溢出。
int main()
{
int i = 0;
int sum = 0;//保存最终结果
int n = 0;
int ret = 1;//保存n
的阶乘scanf("%d", &n);
对于 (i = 1; i <= n; i++)
{
int j = 0;
对于 (j = 1; j <= i; j++)
{
ret *= j;
}
总和 += ret;
}
printf("%d\n", sum);
返回0;
}
//问题是每次使用后ret不重置
此时,如果我们是3,我们期望输出9,但实际输出是15。
为什么?
这里我们必须找到我们的问题。
1。首先猜测问题的原因。最好初步确定问题的可能原因。
2。实际动手调试是必要的。
3。调试的时候我们有个好主意
2。示例2(重要):
#包括
int main()
{
int i = 0;
int arr[10] = { 0 };
对于 (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("呵呵\n");
}
返回0;
}
//程序无限循环
研究一下程序死循环的原因。
?我们发现i和arr[12]的地址是相同的,即i就是arr[12]! ! ! !
分析:
?6。如何编写好的(易于调试)代码。
6.1 优秀代码:
1。代码运行正常
2。很少有bug
3。高效率
4。高可读性
5。可维护性高
6。清除评论
7。完整的文档
常见
编码
小贴士:
1。使用断言
2。尝试使用 const
3。培养良好的编码风格
4。添加必要的评论
5。避免编码陷阱。
6.2 演示编写合格的代码
使用仿真实现库函数:
strcpy解释一下
#包括
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest;
assert(dest && src);//断言
while (*dest++ = *src++)
{
;
}
返回ret;
}
int main()
{
char arr1[20] = "xxxxxxxxxx";
//xxxxxxxxx
char arr2[] = "你好";
printf("%s\n", my_strcpy(arr1, arr2));
返回0;
}
6.3 const
的作用#包括
//代码1
无效测试1()
{
int n = 10;
int m = 20;
int* p = &n;
*p = 20;//可以吗?
p = &m; //可以吗?
}
无效测试2()
{
//代码2
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//可以吗?//否
p = &m; //可以吗?//可以
}
无效测试3()
{
int n = 10;
int m = 20;
int* const p = &n;
*p = 20; //可以吗?//可以
p = &m; ?//可以吗?//不行
}
int main()
{
//无成本测试
test1();
//测试常量放在*
的左边test2();
//测试常量放在*
右边test3();
返回0;
}
结论:
const修改指针变量时:
1。如果const放在*左边,则修改指针指向的内容,保证指针指向的内容不能通过指针改变。但指针变量本身的内容是可变的。
2。如果const放在*右边,则修改指针变量本身,保证指针变量的内容不能被修改,但可以通过指针改变指针指向的内容。
模拟并实施
strlen函数
:
#包括
int my_strlen(const char* str)
{
整数计数 = 0;
断言(str!= NULL);
while (*str)//判断字符串是否结束
{
计数++;
str++;
}
返回计数;
}
int main()
{
const char* p = "abcdef";
//测试
int len = my_strlen(p);
printf("len = %d\n", len);
返回0;
}
7。常见的编程错误
7.1 编译错误
直接查看错误信息(双击)即可解决问题。或者你可以凭经验来做。比较简单。
编译时经常出现语法错误(通常是语法错误)
7.2 链接错误
看错误信息,主要是在代码中找到错误信息中的标识,然后定位问题。通常标识符名称不存在或拼写错误。
7.3 运行时错误
通过调试逐步定位问题。最难做的事。 (通常是逻辑错误)
本文介绍了如何在VS2019中使用Windows桌面应用程序模块创建Win32窗口,分享给大家。详情如下:
头文件Project1.h:
#pragma Once
#include "resource.h"
实现文件Project1.cpp:
// Project1.cpp:定义应用程序的入口点。
//
#include "framework.h"
#include "Project1.h"
#define MAX_LOADSTRING 100
//全局变量:
实例 hInst; // 当前实例
WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本16位双字节字符
WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance); //返回无符号短2字节整数
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //返回长4字节整数作为地址
INT_PTR CALLBACK 关于(HWND, UINT, WP