.net core 调用c dll_C开发实战-使用VS2019开发C程序常用技巧

使用Visual Studio 2019 开发C语言版helloworld

Visual Studio 2019下载地址 https://visualstudio.microsoft.com/zh-hans/vs/

1.启动Visual Studio 2019
2.创建新项目

5584efb7afc54acf03ab3e130fc1d8b5.png

3.设置项目模板
选择基于C++的空项目

905ae9c68da82e6f14cbb4d2509727b9.png

4.设置项目名称、位置以及解决方案名称
项目名称: c-core-foundational
位置:D:workspacecittimelinedotnetvs2019
解决方案名称:c-core

394490c00e0fc0040f85dfd9b6db3e1d.png

5.项目结构说明
解决方案c-core下可以创建多个项目,例如c-core-foundational,c-core-advanced
源文件用于存放后缀名是.c的源文件
头文件用于存放后缀名是.h的头文件

96885d1436d0cd03d3e7e1eaa0e022fb.png

为了存放不同章节的源程序(即C代码),这里创建net/ittimeline/c/core/foundational/的筛选器

337d198a59ca08c6693e05d71dc864fc.png
f1c43a5ea24df4845aa04751a9371f9a.png

6.创建源文件

ff2d8f55cdde0e8ff073bea94584ca18.png


选择基于Visual C的C文件,文件后缀名是.c,例如这里的helloworld.c

132e2a07d59eca8ceccffa9868063a75.png

7.编写hello world

#include int  main () {printf("Hello C with Windows10 1903 & Visual Studio 2019 16.8  ");return 0;}

8.编译、运行程序
Visual Studio 2019提供了快捷键Ctrl+F5用于开始执行(不调试)

6fb27209fd9e3235e532c8b6ab9ebbd3.png


当运行程序时Visual Studio 2019 会开启一个终端,然后打印输出Hello C with Windows10 1903 & Visual Studio 2019 16.8 并换行

3eafbf183be1993458f01eaca553b501.png

Visual Studio 2019调试C程序

首先编写一段C程序,然后嵌套汇编实现两个整数变量相加

#include /* c语言嵌套汇编语言实现变量的加法运算*/int main(){//定义整型变量i,j,kint i;int j;int k;__asm{mov i, 10//10的值放在i对应内存的位置mov j, 20//20的值放在j对应内存的位置mov eax, i//把i内存的值放在eax寄存器add eax, j//eax和j相加,结果放在eaxmov k, eax//eax的值放在k中}printf("%d", k);//把k的值输出return 0;//成功完成}

之前使用Ctrl+F5是不调试运行程序,如果要调试程序,按快捷键F5即可。
在调试之前,需要在程序的指定位置添加断点,当程序运行到断点的地方时会暂停

3ebe9ca0a648a0f4b1e00c2bf91e3deb.png

然后F5启动调试,在局部变量视图中可以查看到程序中的局部变量值的变化过程

e024bb58f67d6f6203245ccca2c27ab7.png

F11逐语句执行,就是程序中的代码一行一行的执行,当F11走完成mov j, 20 时,此时i的值是10,j的值是20

0b6caf30c40f39c00b79197658233399.png

赋值完成

当走完mov k ,eax时,eax寄存器的值是30(1E转换成10进制就是30),此时可以通过寄存器视图查看eax的值

eccc62d7409a5a15ca05fcfc6d227181.png

在日常开发中还会关注变量的内存地址,通过监视1窗口增加监视,输入地址符&加上变量的名字就可以获取变量的地址

1406daf1a77cdeb49fbba8929a3da772.png

拿到变量的地址以后就可以查看变量在内存中的存储
Visual Studio 2019的内存视图中整数变量的值默认是使用16进制表示的,右边列的选项是代表字节数量,例如4就是使用4字节显示

a69aae708122a6eb60e8b6997f5d2e62.png

在使用Visual Studio 2019调试程序的过程中,除了F11逐语句以外,还有个逐过程F10,为了理解他们二者的区别,这里编写了一个程序,其中自定义了一个debug方法,在main函数中被调用,
并且在debug()函数被调用的地方下了断点,然后F5调试程序,然后分别以F10和F11调试,发现F10不会进入debug()函数内部执行调试,而F11会进入debug()函数内部执行调试。

90ed8152b0e25c6d985443eeb24d39f5.png
#include void debug() {printf("inside debug method");}/*理解Visual Studio 2019的调试快捷键F11和F10的区别*/int main() {printf("跟光磊学C语言");debug();return 0;}

因此后期如果调试程序时,不想进入方法内部,应该按F10,想要进入调用方法内部按F11即可。而Shift+11可以跳出被调用的方法。

使用system函数阻止Visual Studio 2019的终端闪退

在Visual Studio 2019中 点击本地Windows调试器就可以直接编译 、运行程序,

acec8d976c3dd758ec366920fc7b8b62.png

x86/x64

其中左边的X86表示32位,X64表示64位,如果C语言嵌套了汇编代码,则不能使用X64来编译、运行C程序。

#include int  main () {printf("Hello C with Windows10 1903 & Visual Studio 2019 16.8  ");return 0;}

当使用Visual Studio 2019的Windows调试器调试运行程序时出现了闪退现象,而如果手动启动终端后使用GCC编译运行程序则不会闪退。为啥勒?

因为Visual Studio 2019中的终端是Visual Studio 2019自动启动的终端,因为printf()函数默认是往终端打印输出""字符串的内容,当main函数结束以后Visual Studio 2019会关闭终端,弹出终端和关闭终端的时间非常短,因此发生了闪退现象。

那么如何解决这个问题呢?

方案1:使用死循环。然后手动点击右边的×关闭窗口或者按Ctrl+c强制中断程序。不推荐使用

方案2:getchar(),该函数是从键盘获取一个字符,获取字符后退出程序。也不推荐使用

方案3:pause暂停命令,请按任意键提示...,C语言中使用system(“pause”)函数调用,这样Visual Studio 2019中的C程序终端就不会闪退了。 推荐使用

自己打开的终端只有在输入exit命令才会退出终端。

system(“pause”);语句只有在Visual Studio 中才需要使用,因为它会自动关闭终端,而在其他的集成开发环境Qt,CLion,XCode中则不需要。

Visual Studio 2019中常用快捷键

快捷键功能ctrl+k,f自动格式化选中代码ctrl+k,c注释选中代码ctrl+k,u取消选中注释代码F9设置断点F5调试运行Ctrl+F5不调试运行Ctrl+Shfit+b编译不运行F10next逐过程调试,一个方法一个方法调试,如果代码中有函数调用,不会进入函数内部,但是函数还是会被调用执行F11step逐语句调试,一行一行调试,如果代码中有函数调用,则会进入函数内部一行一行执行Shfit+F11跳出F12查看函数定义Cltr+ -退出函数定义

Visual Studio 2019的C4996错误

C4996是Visual Studio 2019内部错误的一个编号

Visual Studio 2019希望开发者使用Visual Studio提供的非标准C库函数,但是开发者希望使用标准的C库函数,因为标准的C库函数是可以跨平台的。

#include #include #include int main(int argc,char *argv[]){char buffer[32]="";  //strcopy()是标准的库函数  //将hello string 复制到buffer变量中  strcpy(buffer,"hello string");  printf("bufffer = %s",buffer);  system("pause");  return 0;}

当运行该程序时就会引发C4996错误,Visual Studio 2019的输出视图中会提示strcopy是不安全的函数,建议使用strcopy_s,或者使用 宏定义解决,宏定义放在#include语句的上面

#define _CRT_SECURE_NO_WARNINGS  # 防止C4996错误

除此以外还可以使用#pragma warning(disable:4996)来防止Visual Studio 2019的C4996错误

 #pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS  # 防止C4996错误#include #include #include /*解决Visual Studio 2019 的C4996错误@author liuguanglei 18601767221@163.com@wechat 18601767221@website ittimeline.net@version 2020/11/22*/int main(int argc, char* argv[]) {char buffer[32] = "";//strcopy()是标准的库函数//将hello string 复制到buffer变量中strcpy(buffer, "hello string");printf("bufffer = %s", buffer);system("pause");return 0;}

Visual Studio 2019 代码片段

如下代码片段是在Visual Studio 2019中C程序的最小程序结构

#define _CRT_SECURE_NO_WARNINGS#include #include   /*          @author liuguanglei 18601767221@163.com    @wechat 18601767221    @website ittimeline.net    @version   */int main(int argc, char *argv[]){system("pause");return 0;}

代码片段是在Visual Studio 2019中使用快捷键(这里定义的快捷键是ct)生成指定模板的代码

1.创建代码片段文件 vs_code_c_template.snippet

<?xml version="1.0" encoding="utf-8"?>MyCCodeTemplatectc的标准模板代码Microsoft CorporationExpansionSurroundsWith            #include       /*                @author liuguanglei 18601767221@163.com        @wechat 18601767221        @website ittimeline.net        @version       */int main(int argc, char *argv[]){system("pause");return 0;}]]>
  1. 选择Visual Studio 菜单栏 工具->代码片段管理器 (快捷键:Ctrl+k,b)打开
    语言选择Visual C++
    然后选中My Code Snippets,单击导入,然后选择磁盘目录下的vs_code_c_template.snippet文件,然后点击打开,确定即可。
  2. 在Visual Studio 2019中创建C语言的源文件后输入快捷键ct就可以生成固定的C代码
#define _CRT_SECURE_NO_WARNINGS#include #include /*@author liuguanglei 18601767221@163.com@wechat 18601767221@website ittimeline.net@version*/int main(int argc, char* argv[]){system("pause");return 0;}
db46d4bc757726f1979cf500e3263ad9.png
007b8aadf6b8216115ac85d012a8c2ed.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值