前言 - 简介

  我们在写代码的过程中, 不可避免的重度依赖所处的开发环境. 本文重点带大家在 Window 搭建 C

简单控制台项目. 当作存档, 用于记录项目搭建各种重复操作.  在详细过程之前, 我们约定下基础环境

  Best new version Window

  Best new version Visual Studio

例如笔者当前是 Windows 10 + Visual Studio 2019, 其中 Windows 推荐开启 UTF-8 支持.

那此间, 骚年去唤醒自己的道 ~

正文 - 过程

  正文分三个过程. 其一是 Visual Studio C Consule 常用设置. 其二是导出模板, 来解放生产力. 其三演示使用.

Visual Studio C Consule 常用设置

1. 创建 c_template 项目

  

2. 只保留 x64 环境

人的精气有限, 做钉子更省力.

3. 添加基础 main.c

4. Visual Studio 项目详细配置

a). 区域环境配置
项目右击 -> [配置属性] -> [高级] -> [字符集] -> [未设置]
b). 添加包含库
项目右击 -> [配置属性] -> [链接器] -> [输入]
psapi.lib
user32.lib
shell32.lib
ws2_32.lib
userenv.lib
iphlpapi.lib
advapi32.lib
c). 添加预编译处理器
项目右击 -> [配置属性] -> [C/C++]-> [预处理器] -> [预处理器定义]
[Debug]
_DEBUG
[Release]
NDEBUG
 
_LARGEFILE_SOURCE
_FILE_OFFSET_BITS=64
WIN32_LEAN_AND_MEAN
_CRT_SECURE_NO_WARNINGS
_CRT_NONSTDC_NO_DEPRECATE
_WINSOCK_DEPRECATED_NO_WARNINGS
d). 设置编译额外选项
项目右击 -> [配置属性] -> [C/C++] -> [常规] -> [调试信息格式] -> [程序数据库 (/Zi)]
项目右击 -> [配置属性] -> [C/C++] -> [代码生成] -> [运行库] -> [多线程/MT]
项目右击 -> [配置属性] -> [C/C++] -> [高级] -> [编译为] -> [编译为C代码/TC]
项目右击 -> [配置属性] -> [C/C++] -> [高级] -> [禁用特定警告] -> [4098]
项目右击 -> [配置属性] -> [C/C++] -> [命令行] -> [/D "restrict=__restrict"]
项目右击 -> [配置属性] -> [链接器] -> [常规] -> [启用增量链接] -> [否 (/INCREMENTAL:NO)]
项目右击 -> [配置属性] -> [链接器] -> [系统] -> [子系统] -> [控制台]
项目右击 -> [配置属性] -> [链接器] -> [命令行] -> /IGNORE:4099
 
详细配置遇到不明白可以自行搜索, 可以图了解, 也可以求精深

导出模板

  上面这些每次操作都添加, 很恶心. 我们可以通过 [项目] -> [导出模板] 一劳永逸. ~

1. 前戏

  找到 c_template.vcxproj 项目文件, 通过你的慧眼, 将其中所有关于 Win32 相关的 xml 配置删除.

2. 导出模板

[项目] -> [导出模板]

添加额外补充

(图片什么的可以因自己喜好自己整)

演示使用

最终生成如下模板内容

不妨既兴通过这个模板演示一段代码

#include <stdio.h>
#include <float.h>
#include <errno.h>
#include <assert.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h> /*
题目:
地上右一个 m 行 n 列的方格.
一个机器人从坐标(0, 0) 的格子开始移动, 它每次可以向左, 右, 上, 下移动一格,
但不能进入行坐标和列坐标的数位之和大于 k 的格子. 例如, 当 k 为 18 的时候,
机器人能够进入方格 (35, 37), 因为 3 + 5 + 3 + 7 = 18.
但它不能进入方格 (35, 38), 因为 3 + 5 + 3 + 9 = 19.
请问该机器人能够到达多少个格子?
*/ extern int moving_count(int m, int n, int threshold); int main(int argc, char * argv[]) {
int m = , n = , threshold = ;
int count = moving_count(m, n, threshold);
printf("<m = %d, n = %d, threshold = %d> -> %d\n", m, n, threshold, count);
return ;
} struct visite {
int rows;
int cols;
int threshold;
bool visited[];
}; inline struct visite * visite_create(int rows, int cols, int threshold) {
struct visite * v = malloc(sizeof(struct visite) + (rows * cols) * sizeof (int));
assert(v && rows > && cols > && threshold > );
v->rows = rows;
v->cols = cols;
v->threshold = threshold;
memset(v->visited, , (rows * cols) * sizeof (int));
return v;
} inline void visite_delete(struct visite * v) {
if (v) free(v);
} static inline int get_digit_sum(int num) {
int sum = ;
while (num > ) {
sum = num % ;
num /= ;
}
return sum;
} inline bool visite_check(struct visite * v, int row, int col) {
if (row >= && row < v->rows && col >= && col < v->cols && !v->visited[row * v->cols + col]) {
return get_digit_sum(row) + get_digit_sum(col) <= v->threshold;
}
return false;
} int visite_moving(struct visite * v, int row, int col) {
if (!visite_check(v, row, col))
return ; v->visited[row * v->cols + col] = true;
return + visite_moving(v, row, col - )
+ visite_moving(v, row, col + )
+ visite_moving(v, row - , col)
+ visite_moving(v, row + , col);
} int
moving_count(int m, int n, int threshold) {
if (m < || n < || threshold < )
return ;
if (threshold == )
return ; struct visite * v = visite_create(m, n, threshold); int count = visite_moving(v, , ); visite_delete(v); return count;
}

(有心的道友, 也可以转成栈回溯. )

后记 - 展望

错误是难免的, 欢迎朋友指正互相印证苦中作乐.

明月照小楼

  立秋 - 刘翰 - 南宋
乳鸦啼散玉屏空,一枕新凉一扇风。
睡起秋声无觅处,满阶梧桐月明中。

  

C 编程环境搭建 Window 篇的更多相关文章

  1. Qt在Windows下的三种编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  2. Qt4.8在Windows下的三种编程环境搭建

    Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...

  3. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  4. ArduinoYun教程之Arduino编程环境搭建

    ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...

  5. Qt在Windows下的三种编程环境搭建(图文并茂,非常清楚)good

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  6. 【Qt开发】Qt在Windows下的三种编程环境搭建

    从QT官网可以得知其支持的平台.编译器和调试器的信息如图所示: http://qt-project.org/doc/qtcreator-3.0/creator-debugger-engines.htm ...

  7. C++调用Lua编程环境搭建及测试代码示例

    C++调用Lua编程环境搭建及测试代码示例 摘要:测试环境是VS2005+LuaForWindows_v5.1.4-45.exe+WIN7 1.安装lua开发环境LuaForWindows_v5.1. ...

  8. Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

    此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...

  9. Qt在Mac OS X下的编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

随机推荐

  1. Vue.js最佳实践--VueRouter的beforeEnter与beforeRouteLeave冲突解决

    用Vue做应用管理系统,通常会在离开某个页面的时候,需要检测用户是否有修改,询问用户需要不需要保存之类的需求 这时候,在读VueRouter文档:组件内的守卫 的时候,发现beforeRouteLea ...

  2. Qt之Q_PROPERTY宏理解

    在初学Qt的过程中,时不时地要通过F2快捷键来查看QT类的定义,发现类定义中有许多Q_PROPERTY的东西,比如最常用的QWidget的类定义: Qt中的Q_PROPERTY宏在Qt中是很常用的,那 ...

  3. PHP查询附近的人及其距离的实现方法

    1.附近的人 //获取该点周围的4个点 $distance = 1;//范围(单位千米) $lat = 113.873643; $lng = 22.573969; define('EARTH_RADI ...

  4. Redis_数据类型

    Redis支持的键值数据类型如下: 字符串类型 散列类型 列表类型 集合类型 有序集合类型  一.字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.一个字 ...

  5. Linux搭建邮件服务器Postfix+Dovecot+MySQL+PHP

    用于搭建的服务器信息 阿里云 Centos 6.5 32位 安装过程1.安装Postfix 版本(2:2.6.6-8.el6) yum -y install postfix 安装完成还需要替换系统自带 ...

  6. AI-数据标注类型

        随着数据的暴增和计算机硬件技术的发展,也催生了AI技术在各行各业的应用渗透.而想将AI技术应用到各行各业,数据是必需品.因为数据直接影响到AI最终训练出来的模型好坏.AI建模没有太大门槛,但数 ...

  7. css 高度随宽度比例变化

    [方案一:padding实现] 原理: 一个元素的 padding,如果值是一个百分比,那这个百分比是相对于其父元素的宽度而言的,padding-bottom 也是如此. 使用 padding-bot ...

  8. 借助模板类自动实现COM连接点接收器(Sink)更新

    之前在借助模板类自动实现COM连接点接收器(Sink)中对原作者的代码进一步封装,弄清了连接点使用的原理,在看ATL代码的过程中,发现ATL本身就提供了AtlAdvise/AtlUnadvise这样的 ...

  9. $.fn与$.fx什么意思; $.extend与$.fn.extend用法区别; $(function(){})和(function(){})(jQuery)

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc() 那么你可以这样子:$("#div").abc(); 通常使 ...

  10. 使用plv8+hashids生成短链接服务

    有写过一个集成npm plv8 以及shortid生成短链接id服务,实际上我们可以集成触发器自动生成url对应的短链接地址,hashids也是一个不错的选择. 以下是一个别人写的一个博客实现可以参考 ...