【黑马程序员】C语言学习笔记(3)-预处理指令

【C语言】- 预处理指令3 - 文件包含 这篇小文介绍最后一个预处理指令---文件包含 一、基本概念 其实我们早就有接触文件包含这个指令了, 就是#include,它可以将一个文件的全部内容拷贝另一个文件中。 二、一般形式 1、第1种形式#include <文件名> 直接到C语言库函数头文件所在的目录中寻找文件 2、第2种形式#include "文件名" 系统会先在源程序当前目录下寻找,若找不到,再... 阅读详情

C语言源程序在进行编译、链接之前会进行检测是否有一些特殊的预处理指令,若检测一些特殊的预处理指令则会进行相应的处理。C语言中多有的预处理指令都以符号“#”开头,并且结尾不使用分号。预处理指令在程序中出现的位置没有限定,即可以出现在任何地方,它的作用范围是从它出现的位置到文件尾。但一般我们把预处理指令写在文件的开头,这种情况下,他的作用范围会是整个源程序文件。C语言主要提供了三大类预处理指令:宏定义、文件包含、条件编译

  一、宏定义

  1、不带参数的宏定义

有时我们会在程序中使用一些常量,比如使用圆周率PI,这时为了避免重复书写复杂数据和为了以后修改方便,我们会使用宏定义来定义这些常量。不带参数的宏定义的语法为:#define 宏名 字符串,比如: #define PI  3.1415926。或许有人会疑惑为什么使用宏定义而不使用全局常量,这是因为宏定义会在程序编译之前进行处理,而且宏定义只是单纯的字符串替换,即在后续所有使用PI的地方都会用3.1415926进行替换掉,并不涉及数据类型、内存分配等处理。因此宏定义更加高效、安全。在使用宏时,我们习惯将宏名大写,并且末尾不加空格。当我们希望在代码的某处之后都不再使用之前的某个宏定义时我们可以使用#undef命令结束一个宏,例如结束PI宏的定义,#undef PI。当然在定义一个宏时我们可以引用已经定义的宏名,例如:  #define  CIRCLE 2*PI*3.0

2、 带参数的宏定义

当我们在定义一个宏时,我们希望不仅进行我们所希望的字符串的替换,我们也希望可以自己指定参数进行替换时我们就可以使用带参数的宏定义。其语法为:#define 宏名(参数列表) 字符串。例如:

#include <stdio.h>
#include <stdlib.h>
#define DOUBLE(a) 2*(a)

int main()
{
    printf("%d\n", DOUBLE(2));
	system("pause");
	return 0;
}
结果为:

当调用DOUBLE(2)时,编译器会直接使用2*2进行文本替换,所以得到的结果为4。但我们使用带参数的宏定义时需要注意以下几点:

(1)宏名与参数列表之间不能有空格,否则编译器会以为空格之后的字符串都是进行字符串替换的字符串。例如:如果我们书写#define DOUBLE   (a)   2*a时,当进行替换时会替换成:(a) 2*a(2),此时编译器不能正确编译。

(2)在定义宏时应用小括号将字符串的参数括起来,否则会出现意想不到的错误。例如:执行DOUBLE(3+4),本来我们期望的结果为14,但如果我们采用这样的宏定义:#define DOUBLE(a) 2*a,我们会得到这样的替换:2*3+4 = 10。

(3)我们最好将计算结果也用括号括起来,比如我们定义一个宏Pow(a),其功能是返回a的平方,若不使用小括号括住结果则:#define Pow(a) (a)*(a),我们调用Pow(10)/Pow(2),会得到替换结果为:(10 )*( 10) / (2) * (2) = 100,并不是我们所期望的:100/4 = 25。但如果我们将宏改为:#define Pow(a) ((a) * (a)),则结果会变为:

((10)* (10))/ ((2)* (2)) = 25。 

二、文件包含

在C语言的代码文件开头,我们通常都会看到这样一句#include <stdio.h>,这就是C语言中文件包含的预处理指令。这句话的作用就是在预处理文件时将stdio.h文件的内容全部拷贝到当前文件的当前位置。文件包含的预处理命令有两种形式,第一种:#include <>,第二种:#include " "

#include<文件名>的形式与#include " 文件名"的形式在本质上没有不同,都是找到文件内容然后拷贝到当前文件。但是这两种方式的区别在于对于指定的文件的路径搜索顺序不同,#include<>形式将直接到C语言库函数头文件所在的目录寻找头文件,如果没有查找到目标文件则会直接报错;而 #include " "形式将先会去源程序所在的当前目录下寻找头文件,如果没找到再到操作系统的path路径中寻找,如果仍就未找到则会去C语言库函数头文件所在目录中查找,如果依旧未找到则会报错。因此,我们使用文件包含指令时一般按如下的规则使用:当我们确定使用库函数头文件时我们使用#include<>形式,如果我们使用自己自定义的头文件时我们一般使用#include" " 形式。

使用C语言的#include指令有一点需要注意,那就是#include指令有可能造成头文件的重复包含使得编译效率降低。什么是头文件的重复包含?比如我们定义了一个头文件test1.h,而且我们在test1.h中包含了我们自己定义的另一个头文件#include"test.h",紧接着我又定义了一个test2.h,并且我在test2.h中包含了test1.h,但是当我在main函数中包含时我使用了#include"test1.h" 和#include "test2.h",那么我们将会拷贝两次test.h到当前的文件。那么为了解决重复包含的问题我们一般会引入条件编译指令,使用条件编译指令来防止头文件的重复包含。

三、条件编译

在C语言中如果我们希望程序中的一部分代码只有在满足特定的条件时才进行编译,否则不进行编译时,我们会采用条件编译的策略。条件编译的基本用法为:

#if 条件1

...Code1...

#elif 条件2

...Code2...

#else

...Code3...

#endif

上述指令并不等同于C语言中的if else指令,if与elif后的判定条件一般是宏定义,如果条件1成立则会将Code1表示的代码编译进源文件,如果条件2成立则只有Code2代表的代码段会被编译进源程序。如果条件2也不成立则只有Code3会被编译进源文件,末尾的#endif一定要有,否则#else以下的所有内容都将会被看成Code3的内容,这是不符合实际情况的。例如:

#include <stdio.h>

#define NUMBER 2

int main()
{
    #if NUMBER == 1
        printf ("It's One\n");
    #elif NUMBER == 2
        printf ("It's Two\n");
    #else
        printf ("It's Nothing\n");
    #endif // NUMBER
    return 0;
}
运行结果:


另一组指令#ifdef和#ifndef如此类似,但这组指令一般用在防止头文件重复包含时,其使用的一般语法为:

#ifdef 宏名

 ...Code...

#endif

                                                        或:#ifndef 宏名

 ...Code...

#endif

第一条命令会判断指定的宏是否已经定义,如果定义过则将Code编译进去,后一条命令则与此相反。例如我们在编译一个test.h的自定义头文件时我们一般会在头文件开头这样写:

#ifndef _TEST_H_
#define _TEST_H_
...
#endif // _TEST_H_
这样当第一次#include "test.h"时会正确包含,并定义一个_TEST_H_这个宏,当后续重复包含时会检测到_TEST_H_这个宏已经定义则#ifndef指令不成立,就避免了重复的包含同一个头文件。

预处理命令总结 C++预处理命令有三种:宏定义命令、文件包含命令、条件编译命令。这些命令在程序中都是以“#”来引导的,每条预处理指令必须单独占用一行,但在行尾不允许有分号“;”。 1.宏定义命令 使用#define定义 1).常量定义 #define PI 3.1415926 这里的#define就是宏定义命令,编译器在处理这个代码之前会对PI进行处理替换为3.1415926,PI称为宏名。 通常宏名定义为大写,以便与普通标识符区别。 宏被定义后,通常不允许再重新定义,只有使用 #undef 命令才可以重新定义。 一个定 阅读详情

相关推荐

RK3588极速成功部署YOLO26完整全链条:从pt导出、ONNX转换到rknn-toolkit-lite2落地与CMA内存优化

帮助你顺利完成pt模型到瑞星微3588上rknn模型的高效部署

昆兰.沃斯 的博客 532

C语言预处理概述以及文件包含命令

已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。这种以#号开头的命令称为预处理命令。 C语言源文件要经过编译、链接才能生成可执行程序: 1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于VC/VS,目标文件后缀为 .obj;对于GCC,目标文件后缀为 .o。 编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程

ching的博客 1651

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】

近期开始学习英伟达的工控板,作为新手还是有很多不同懂得地方,但是一部分它用的linux系统,有点像玩树莓派,通过自己一段时间学习can调试,终于可以简单通信了。开始的时候,自己也是什么都不是很懂,从新手一点点摸索过来,现在使用工控机,简单can通信也已经没有问题了,算是有些进步吧。每一步走的都很艰辛,需要反复验证,才能准去无误,开始以为发送没有问题就没事了,没想到发送可以却接受不行,每一步都要反复确认啊,这个问题会持续关注下吧。

qq_22146161的博客 6120

c语言中常用的预处理命令有三种,C语言笔记(三)--- 预处理指令

第九章 预处理命令例如包含命令 #include宏定义命令 #define这些命令都放在函数之外,而且一般都放在源文件的前面,他们称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言的一个重要功能,他由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕后自动进入对源程序的编译。C语言提供了...

weixin_31970409的博客 1736

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

强化学习——day16 动态规划算法

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略

想太多的学习日志 1550

C/C++编程笔记:C语言预处理命令是什么?不要以为你直接写#就行!

很多小伙伴在自己写代码的时候,已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。其实这种以#号开头的命令称为预处理命令。 C语言源文件要经过编译、链接才能生成可执行程序: 1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于 VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o。 编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。 2) 链接(Link)是针对多个文件的,它

致力于C语言C++知识分享! 592

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2623

黑马程序员——C语言笔记之预处理指令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 预处理指令:             预处理指令就是指在编译器进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。当队一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。C语言中提供了很多种与处理功能,如宏定义、文件包含、条件编译

meimei6_6的博客 525

OpenStack详解、排错、经验总结

第1章 Openstack简介 1.1 计算(Compute):Nova。 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。 1.2 对象存储(Object Storage):Swift。 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供

weixin_40548182的博客 1974

14003.xilinx系统移植

文章目录1 xilinx 系统移植 sd卡版本1.1 创建项目1.2 拷贝 *.hdf 到工程目录1.3 根据hdf文件对系统进行配置1.3.1 设置内核源码路径为本地1.3.2 设置分区的名称与大小1.4 清除本地缓存并编译成功1.5 打包生成BOOT.BIN并拷贝到sd卡1.6 问题1.7 系统启动成功1.8 配置设备树文件丰富系统外设 1 xilinx 系统移植 sd卡版本 芯片型号 ZYNQ UltraScale+ XAZU2EG ,对应厂家提供的demo板为 zu102或zu104 1.1 创建

写给自己的笔记 481

黑马程序员——C语言——预处理指令

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——— 1、所有的预处理指定都是以#开头。2、预处理指定分为3种:宏定义、条件编译、文件包含。3、预处理指令在代码编译前执行。4、预处理指令的位置是可以随便写的。5、预处理指令的作用域:从编写指令的那行开始,一直到文件结尾。6、宏名一般用大写,变量名一般用小写。 一、宏定义 1、不带参数的宏定义

qq_24074659的专栏 514

128、点云配准与ICP:经典配准算法与深度学习配准

上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。

sundong_81的博客 42

黑马程序员——C语言---预处理指令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 预处理指令 1、基本概念     以“#”号开头的预处理命令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源程序文件的前面,它们称为预处理部分。     所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)

liuming_xing_cool的博客 807

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

黑马程序员—C语言—预处理指令及补充

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

lan_wen963的专栏 531

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

黑马程序员——C语言笔记之预处理指令和模块化编程

------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ---------- 1、预处理指令的概念及分类 以“#”号开头的预处理指令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理指令。 一般分为三类:文件包含、宏定义和条件编译。 宏

林涵的博客 595

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

黑马程序员-C语言的预处理指令总结

C语言的预处理指令 一.核心用法: 1.所有的预处理指令都是以#开头 2.预处理指令在代码翻译成0和1之前执行 3.预处理的位置是随便写的 4.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用 5.宏名一般用大写或者以k开头,变量名一般用小写 二.宏定义 // *宏定义是让下面的代码在编译之前就将

dsxcoolok的专栏 559

黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归

————————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———————————— ————————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ————————————

dimost的专栏 424

黑马程序员——5、C语言(预处理指令)

一、hong'idn

tan_qi的专栏 505

黑马程序员——C语言—预处理指令和static的作用

C语言第四篇---预处理指令和static的作用              这是一个小插曲,原本这篇是OC第一篇的,但是C中还是提一下预处理这个概念,总结一下。             预处理指令是在编译器翻译成0和1之前让C语言读取的一种指令,指令分为:宏、条件编译、 文件包含,三种指令,先说一说宏:宏分为不带参数的宏,和带参数的宏,宏定义就是替换C语 言中的文本,比如将C语言中

wu417284911的专栏 591

黑马程序员---C语言学习笔记之预处理指令、宏和条件编译

一、预处理指令的概念及分类 1.基本概念 以“#”号开头指令都称为【预处理指令】。如包含命令#include 等。在源程序中这些命令都放在函数之外。而且一般都放在源文件的前面,他们称为【预处理部分】   所谓预处理是指在进行编译的第一道扫描(词法扫描和语法扫描)之前所做的工作,预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预

chunhuayun的专栏 624

黑马程序员——C语言中的预处理指令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Atelas_Leo的博客 495

黑马程序员——12-C语言之预处理指令

 一、预处理指令简介 1、所有的预处理指令都是以#开头,且结尾没有分号 2、预处理指令在代码翻译成0和1之前执行 3、预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4、C语言提供的预处理指令主要有:宏定义、文件包含、条件编译 二、宏定义

yqlqt的专栏 358

黑马程序员——枚举、预处理指令和递归

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 枚举类型:(和结构体、指针都经常用)适用于变量有固定取值的情况

want_heima的专栏 428

【黑马程序员】————预处理指令1-宏定义

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且...

aa123321621的博客 177

15、黑马程序员-C语言预处理指令

一、什么是预处理指令 1、C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释,产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2、为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3、预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用

zwcshy的专栏 460
上一篇: 【黑马程序员】C语言学习笔记(2) - 指针
下一篇: 【黑马程序员】-我的OC学习笔记(1)-类
Little__Coder
博客等级 码龄11年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值