预编译

VS2019自定义预编译头文件

坚强是说给别人听的谎言 提交于 2020-03-09 14:59:28
每次编译项目时,编译器会把所有相关的文件复制进项目中并进行编译,但其实,这些被编译的文件中总有一些文件是不会变动的,比如标准库、STL和一些我们自己写的但基本不会更改的头文件等等,可是这些文件却要在每次编译时都被重新包含进项目中并重新编译。可不可以让它们只被编译一次?这样就可以大大缩短编译时间了。事实上确实可以,我们可以通过预编译头文件的方式做到这点。 以VS2019为例,进行自定义预编译头只需要三步: 创建文件: 将希望预编译的头文件都包含到一个头文件中,这里我们将它命名为mypch.h(pch: pre-compiled header);再新建一个cpp文件,命名为mypch.cpp,在其中包含mypch.h。 设置属性: 在mypch.cpp的属性页中,找到C/C++ -> 预编译头,预编译头选择“创建(/Yc)”,预编译头文件填写我们刚刚创建的mypch.h。在项目的属性页中按照2中方法找到预编译头,预编译头选择“使用(/Yu)”,预编译头文件填写mypch.h。 在项目的每个cpp文件的 最开始 加上 #include "mypch.h" 。 这就搞定了。然后就可以多次更改、编译项目测试编译时长看看效果如何,越是头文件多的项目速度提升会越明显。 但是,把所有头文件都进行预编译并不意味着优化,相反,这可能拖慢编译速度。 预编译头之所以可以大幅缩短编译时间

详解css的预编译语言sass

寵の児 提交于 2020-02-28 13:35:04
#千锋逆战班,打卡第二天# sass是css的预编译语言,比css更高更快更强 将sass语言写在后缀为 .sass 或者 .scss 的文件里面。 .sass文件 和 .scss 文件的区别 在 . scss文件里面和写css语法基本一致 在 . sass文件里面就没有大括号和分号,全部依靠缩进来维持关系 这两个文件被编译成css文件以后是一样的 sass工具编译 .sass 和 .scss文件 1. sass单文件编译 + 先写好一个 . scss 或者 . sass后缀的文件 + 打开命令行,切换到文件的目录 + 输入指令 - > sass 要编译的文件 编译后的文件名 + 每次修改scss文件都需要从新编译一下 2. sass 单文件实时编译 => 你先写好一个 . sass 或者 . scss 后缀的文件 => 打开命令行 , 切换到文件的目录 => 输入指令 - > sass -- watch 要编译的文件 : 编译后的文件名 => 一个终端只能监控一个文件 , 你要是想监控多个文件 , 需要开启很多终端 3. sass 文件夹实时编译 => 把一个文件夹里面的 sass 文件全部编译到另一个文件夹里面 => 先准备好一个文件夹 , 这个文件夹是专门来写 sass 文件的 => 代开命令行 , 切换到这个文件夹的目录 => 输入指令 - > sass -- watch

JS的预编译过程

谁都会走 提交于 2020-02-28 12:00:57
预编译发生在函数执行的前一刻 预编译(全局) 三部曲: ①、 生成GO对象 (Global Object) // GO === window GO{ } ②、 找形参和变量声明,将变量和形参名作为GO属性名,值为undefined ③、 在函数体里面找函数声明,值——赋予函数体 预编译(局部) 四部曲: ①、 生成AO对象 (Activation Object 执行期上下文)“作用域” AO{ } ②、 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined ③、 将实参值和形参统一 ④、 在函数体里面找函数声明,值——赋予函数体 一、 imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。 二、 一切声明的全局变量,都归window所有 三、 window就是全局 四、 ①函数声明整体提升到逻辑最前面   ②变量声明提升到逻辑最前面 JS三部曲 1、 依法分析 2、 预编译 3、 解释执行 来源: https://www.cnblogs.com/zzq-229/p/9674763.html

js 预编译

落花浮王杯 提交于 2020-02-27 15:02:42
js 运行代码的时候分为几个步骤: 语法分析 ==》 预编译 ==》 解释执行 语法解析: 通篇扫描代码,查看语法是否出错 解释执行 : 读一行 - 解释一行 - 执行一行 预编译执行的操作: // 假设之前并没有定义a console.log(a); 打印结果: Uncaught ReferenceError: a is not defined 这个大家应该都知道: 在变量未定义时就对变量进行访问就会报错(typeof 列外) 再看一个例子: 1 // 假设之前并没有定义变量a 2 console.log(a); 3 4 var a = 123; 5 6 console.log(a); 看上面代码会打印什么?会不会报错? 打印结果: undefined 123 为什么这个没有报错:因为在预编译的时候对变量进行了提升即 变量提升。 定义的变量的声明(var a ;)被提到了代码块的最前面,变量的赋值操作(a = 123)没有变化。 所以被编译后就相当于 1 // 假设之前没有定义变量a 2 var a; 3 4 console.log(a); 5 6 a = 123; 7 8 console.log(a); 看下面这个例子: 1 // 假设之前没有定义test 2 console.log(test); 3 4 var test = 123; 5 6 function test ()

编译C++出现错误:Cannot open precompiled header file

北城以北 提交于 2020-02-26 18:01:38
在编译vc时出现了这样的错误,因为这个程序不是本人写的,可能是编写环境的设置问题。所以在自己的电脑上会出现这样的错, (我用的是中文版的vc 6.0) fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\': No such file or directory 在网上搜集了一下,这个错误是预编译文件的设置造成的,有几种可以尝试的途径: 1)单独编译StdAfx.cpp 2)编译所有 (即按Ctrl+F7) 3)在工程-设置-c++-最下面的工程选项里去掉××。Pch文件 4)在工程-设置-c++-在分类里选择预编译头文件,选择自动使用预补偿页眉,或者选择不使用预补偿头 补充知识: 要想弄明白出现问题的原因还是先了解一下pch文件吧,参考一下资料: 预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码. 为什么需要预编译头文件?一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro宏

C++ 宏和预编译 预编译头

感情迁移 提交于 2020-02-26 12:36:17
备注:本小节我也写不出来了个所以然,本人学习C++没有多长时候。如果你们有好的建议和想法请联系告知。谢谢。 C++ 宏: 宏展开:在代码中出现的宏,会用宏实体代替。宏一般都是用大写字母。 #define 定义常量、函数宏 #undef 结束常量、函数宏定义 C++ 预处理器: 预处理器处理源代码,在编译器之前运行。预处理器用指定的头文件的内容替代每个#include. 预处理器变量有两种状态:已定义和未定义。#define 指示接受一个名字并定义该名字为预处理器变量。#ifndef 指示检测指定的预处理器变量是否已定义。 如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif. #pragma 一般格式为:#pragma para 其中para为参数 #pragma once 多次包含保护。只要在头文件的最开始加入这条指令就能保证头文件被编译一次(这点我晕了,不是头文件参与编译吗),考虑到兼容性好多地方都没有广泛使用。 等价于 #ifndef ** #define ** //TODO: #endif C++ 预编译头 预编译头大家应该都见过,国内用VC++的应该很多。我当初第一次看见 #include "stdafx.h" ,我真晕了。 后来才知道,这是有关预编译头的。 “预编译头” 一开始听见这个名字觉得很怪异。怎么不是“预编译头文件” 它有什么作用? C++预处理时

预编译

自闭症网瘾萝莉.ら 提交于 2020-02-18 07:02:21
javascript预编译部分   JavaScript当中不向其他的语言一样,在js中我们会看到一些奇怪的现象就像我们可以在函数声明之前去访问这个函数的名字,并且能够打印出函数体,而且我们还能在变量声明之前去访问这个变量,虽然值是一个undefined但是并没有报错,这些特殊的情况,归结于函数的预编译过程。 console.log(foo); function foo(){}   这样的一段代码,根据javascript解释执行的情况,本应该是报错的,因为找不到函数的啊。但是这里的并没有报错,这里打印出来的是整个函数体。同样这样的情况还有我们可以在变量声明之前访问该变量,这种情况被总结为,函数声明整体提升,变量声明声明提升,提升的场所是整个作用域逻辑的最顶端。 两个不一样的全局变量   1. 暗示全局变量(imply global): 当一个变量未经声明就赋值的时候他就被当作是全局变量, 归window所有。 function foo() { var a = b = 123; } foo(); console.log(b); //123   这里的b就成了暗示全局变量,使得我们在函数的外部能够访问到。   2. 一切声明在全局当中的变量都是window对象的属性 var a = 123; console.log(window.a); // 123   它们的区别是

SQL注入详解

北战南征 提交于 2020-02-17 04:11:45
一:什么是sql注入   SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二: SQL注入攻击的总体思路     1:寻找到SQL注入的位置   2:判断服务器类型和后台数据库类型   3:针对不同的服务器和数据库特点进行SQL注入攻击 三: SQL注入攻击实例 String sql = "select * from user_table where username= ' "+userName+" ' and password=' "+password+" '"; --当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= '’or 1 = 1 -- and password='’ """ --分析SQL语句: --条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功; --然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都--能正确执行,用户轻易骗过系统,获取合法身份。 --这还是比较温柔的,如果是执行 SELECT * FROM user_table WHERE username='' ;DROP DATABASE (DB

Statement与PreparedStatement的区别

有些话、适合烂在心里 提交于 2020-02-13 23:26:01
Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好。 PreparedStatement无序拼接SQL语句,编程更简单. PreparedStatement可以防止SQL注入,安全性好。 Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。 PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个 或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。 SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。 setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。 //Statement的用法 int id=111; String sql="selsect * from user where id="+id; Statement st=connection.CreateStatement(); ResultSet rs=st.executeQuery(sql); //PreparedStatement的用法 //PreparedStatement可替换变量(在SQL语句中可以包含?) String sql="select * from

javascript预编译

点点圈 提交于 2020-02-12 08:14:49
js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了。 理解预编译首先要弄清楚两种概念:函数声明和变量赋值。 function fun(){ }//函数声明 这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理。 var fun= function(){ }//变量赋值 这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作为变量赋值给定义的变量。这种形式在预编译处理阶段,只会给变量ledi分配一个内存空间,不会做初始化。初始化过程中会在执行时执行。 <script><script/>也可看做一个函数,那么它执行前同样进行预编译,与执行函数前预编译四部曲步骤差不多,但它没有形参和实参,就少了一些步骤,但也有不同之处,就是它此时创建不是AO对象了,具体如下: 1.创建GO对象(global object)即window; 2.查找全局变量,将变量名作为window的属性,赋值为undefined(注:未声明就赋值的变量,即隐式变量,也是全局变量); 3.在<script><script/>内查找函数声明,函数名作为全局对象的属性,值为函数引用; 当变量名与函数名相同时,AO或GO内只建一个属性名; 预编译: 函数的预编译发生在执行函数之前。 预编译四部曲: 1.创建AO对象; 2.找形参和变量声明