精华内容
下载资源
问答
  • js事件循环当我们执行一行js代码时,如果是同步任务,就把它直接放到执行栈里面去执行,如果是异步任务,会把它放到一个异步的任务队列中,等待同步任务执行完,然后再从异步任务中读取异步任务.异步任务异步任务又分为 ...

    js事件循环

    当我们执行一行js代码时,如果是同步任务,就把它直接放到执行栈里面去执行,如果是异步任务,会把它放到一个异步的任务队列中,等待同步任务执行完,然后再从异步任务中读取异步任务.

    异步任务

    异步任务又分为 “宏任务” 和 “微任务”.

    宏任务是宿主环境提供的. 例如setTimeout()以及正常的js脚本.

    微任务是由语言标准提供的. 像平时用的 promise,nextTick

    异步任务队列

    异步任务队列里又有 “宏任务队列” 和 “微任务队列” ,如果同步任务执行完了,然后会先去执行微任务,会把所有的微任务执行完,才会去执行新的一轮宏任务.

    测试代码

    // 同步任务console.log("script start");// 异步任务 --- 宏任务setTimeout(() => {  console.log("setTimeout1");}, 0);// 异步任务 --- 微任务 (如果是 new Promise()则是同步任务, 切记)Promise.resolve()  .then(function () {    console.log("promise1");  })  .then(function () {    console.log("promise2");  });// 异步任务---宏任务setTimeout(() => {  console.log("setTimeout2");}, 0);// 同步任务console.log("script end");

    结果调试

    执行console.log("script start"); 因为它是同步代码所以立即打印 script start

    4bcd3d7305befe963904725fb9cb5f44.png

    执行到setTimeout()时,因为它不是一个同步任务,所以会先将它放到异步任务队列中,等待同步任务执行结束才会执行.

    44a96a644b4fd00048ce2bc5d1fb2080.png
    60402094d00c2d270e9ce854c489bf3b.png

    执行到console.log("script end");时,因为是同步任务,所以立即输出 “script end”

    934f43cafe97921cd47957c59a0ab3c2.png

    现在同步任务已经处理完成, 接着就是处理异步任务. 因为 “宏任务” 执行顺序优先于 “微任务”, 所以会先去执行 Promise

    d75f09d8e131097d5653bf15123581ed.png

    异步队列宏任务处理完, 接着 去处理异步队列的 “微任务”

    788f52eecc1f615abbdeb2a52a0185d1.png
    49322ff81443cf03f31973d38254dc7d.png

    执行结果

    script startscript endpromise1promise2setTimeout1setTimeout2
    f2f4783916b4f962ac8e04f79a9d882d.png
    展开全文
  • 众所周知,作为解释型语言的 Python 可不是什么超级快速的语言[来源请求],但许多复杂的库函数(比如 ... 我们将详细聊一聊如何用 C 或者 C++ 写一个 Python 模组(或软件包),内容主要参考 Python 官方文档。作为范例...
    3ad92c624c8e0024adcf3bc8c36ee471.png

    众所周知,作为解释型语言的 Python 可不是什么超级快速的语言[来源请求],但许多复杂的库函数(比如 NumPy 库)却能执行得相当快速。这主要是因为这些库的核心代码往往是用 C 或者 C++ 写好,并经过了编译,比解释执行的 Python 代码有更快的执行速度。

    我们将详细聊一聊如何用 C 或者 C++ 写一个 Python 模组(或软件包),内容主要参考 Python 官方文档。作为范例,我也将用 C 写一个简单的 Python 模组,完成一个简单的数学计算: n!=n×(n-1)×(n-2)… 。为了实现上面的目标,我们需要两个文件:一个 Python 代码 setup.py,以及我们实际编写的 C 语言代码 cmath.c。

    总的来说,我们将用 setup.py 把 C 语言写的代码 cmath.c 构建成一个 Python 库(这其中包括编译代码、查找 Python C 库、连接等操作)。

    那么,跟随优达学城一起开始吧!

    原理

    为了让我们的程序/模组能在 Python 代码中被调用执行,模组需要和 Python 解释器 CPython 进行必要的通讯。因此,我们需要 Python.h 头文件里面的若干对象,并用它们构建出合适的结构体。

    基本上,我们要做的是把实际的 C 语言方法包装起来,以便能够被 Python 解释器所调用,这样我们的 Python 代码才能够像使用普通的 Python 函数一样,调用这个方法。

    编写算法并包装

    首先,我们要在 cmath.c 里引入头文件:

    #include Python.h

    在 Python 头文件里,我们需要用来和 Python 解释器对接的对象(以及函数),都以 Py 开头。在这里,能代表所有 python 对象的 C 对象(基本上就是一个opaque——“不透明”对象)叫做 PyObject。

    不过,在实际使用这些对象之前,我们先把求阶乘的算法写出来(注意,0的阶乘是1):

    int fastfactorial(int n){
    if(n<=1)
    return 1;
    else
    return n * fastfactorial(n-1);
    }

    接着,我们给这个函数进行一下包装。这个包裹函数接收一个 PyObject 类型的指针(指向今后从 Python 代码传入的参数)作为参数,再返回一个 PyObject 类型的指针(指向上面函数的返回值)给外部。

    为此,我们用以下代码来实现这个包裹函数:

    static PyObject* factorial(PyObject* self, PyObject* args){
    int n;
    if (!PyArg_ParseTuple(args,"i

    展开全文
  • 图控大叔构图传递思想阅读从未如此简单!!!01前言 推文模式更改说明:为了避免单篇推文内容过长,图控大叔将尝试将测试代码与知识点部分进行分离的方式呈现,即使用两篇推文来完成内容呈现,一篇推文用于进行知识...
    4724fee91b13c9da4fbf38996ecc98ff.png

    图控大叔

    构图传递思想

    阅读从未如此简单!!!

    01

    前言

           推文模式更改说明:为了避免单篇推文内容过长,图控大叔将尝试将测试代码知识点部分进行分离的方式呈现,即使用两篇推文来完成内容呈现,一篇推文用于进行知识点呈现,另一篇用来承载代码。另外,在推文标题命名上尽量做到仅有【代码】二字的差别,以方便读者查找,望读者知晓!

    02

    代码

    #include 
    #include 
    #include 
    #include 
      
    #include 
    #include 
    #include 
    /*
    公众号:图控大叔
    记录时间:2020-08-09
    */


    //文件类型判断函数    此处输入当前目录下的文件名
    int file_type_judgment(char *file_name){
      
        struct stat buf;
        char *ptr;
        
        bzero(&buf, sizeof(struct stat));
        
        if(lstat(file_name,&buf)<0)
        {
          printf("乱搞事情???%s文件不存在\n", file_name);
          printf("重新来\n");
          
          return -1;
        }

            if( S_ISREG(buf.st_mode) ) ptr="普通文件";

            else if( S_ISDIR(buf.st_mode) ) ptr="目录文件";

            else if( S_ISCHR(buf.st_mode) ) ptr="字符特殊文件";

            else if( S_ISBLK(buf.st_mode) ) ptr="块特殊文件";

            else if( S_ISFIFO(buf.st_mode) ) ptr="管道或FIFO";

            else if( S_ISLNK(buf.st_mode) ) ptr="符号链接";

            else if( S_ISSOCK(buf.st_mode) ) ptr="套接字";
        
        printf("ptr is %s\n", ptr);
        
        return 0;
    }


    int main(int argc,char *argv[]){
        file_type_judgment(argv[1]);
      
        return 0;

    }

    03

    结尾

           本次的代码分享就到这里,与代码同步的知识点在另一命名几乎一致的推文中,需要的读者自行查阅!

    展开全文
  • main()主函数执行完毕后,是否可能会再执行一段代码?给出说明。main主函数是所有程序必须具备的函数,是C/C++人员一接触代码就知道的函数,那么这个问题会难倒很多人,尤其是平常不注意思考,不懂得问为什么的...

    main() 主函数执行完毕后,是否可能会再执行一段代码?给出说明。main主函数是所有程序必须具备的函数,是C/C++人员一接触代码就知道的函数,那么这个问题会难倒很多人,尤其是平常不注意思考,不懂得问为什么的程序员,这个问题的答案是:main() 函数结束后可以执行一些代码,进行清理工作。具体请看下面的解析。

    为此写了四个fun函数,并且四个fun函数和main函数各自打印一句话,通过屏幕上的输出显示ulai验证调用顺序:

    (1)fun函数                             

    3733a65764d8043a8e28082699e447c9.png   

    (2)main函数

    cd3568f54ee38507edd5e9dd3fdc37b3.png

    (3)makefile文件                    

    beb64afb29ea58794170d7afac03a5c4.png   

    (4)运行结果

    50e271bd7d68e0f3cd2fb59db33f0171.png

    过程分析:atexit函数先注册四个fun函数,,然后等待3秒,再打印"hello main"(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先入后出的原则,所以先注册的函数最后执行

    关于atexit:

    一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,atexit函数称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数会主动的调用前面注册的各个函数,但是exit函数调用这些函数的顺序于这些函数登记的顺序是相反的,我认为这实质上是参数压栈造成的,参数由于压栈顺序而先入后出。同时如果一个函数被多次登记,那么该函数也将多次的执行。

    atexit() 用于注册终止函数(即main执行结束后调用的函数),其原型为:    int atexit(void (*function)(void));很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit()结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就是用atexit()函数来注册程序正常终止时要被调用的函数。atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。

    关于exit:

    exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。

    exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束

    exit()函数用于在程序运行的过程中随时结束程序,其原型为:void exit(int state);exit的参数state是返回给操作系统或当前程序的调用程序,返回0表示程序正常结束,非0表示程序非正常结束。main函数结束时也会隐式地调用exit()函数。exit()函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。

    6e1603b07084875aa5830439dbf4521c.png

    展开全文
  • 那么如何在电脑端打开两个微信或者多个微信呢?以前在网上找了许多方法,已经失效了,今天给大家分享一个方法。1.找到安装微信的路径。鼠标点击微信图标右键找到并复制微信安装路径。2.建立命令行txt文件。将以下...
  • 标题党之---我是如何通过这一段代码赚了两百块钱的故事絮絮叨叨:其实如果能够相对快速的获得第一手消息和通过这个消息还会衍生出什么影响 这样的判断很重要啊。故事背景是前段时间做了一个热点消息获取的程序。然后...
  • C语言实现注释行转换

    2017-12-11 00:26:51
    我们发现c和c++ 中的注释标注是不一样的,C语言注释一行或者一段是将内容放在“/*”和“*/”之间,而C++中用“//”放在注释行的最前面,而且C++中是全面兼容C的注释规则,但是我们如何让将C语言注释风格转换成...
  • C语言注释的风格 C++语言注释的风格 如何转换
  • C语言实现注释转换

    2018-05-13 14:11:38
    此篇博客主要写如何将c风格注释(/*xxx*/)转换为c++风格注释(//xxx).下图即为注释转换的过程图:#include&lt;stdio.h&gt; typedef enum State { Normal, FOUND_SLAH,//找到/ CPP_State, C_State, FOUND...
  • C语言编程如何快速注释?

    千次阅读 2020-03-20 17:45:32
    C语言编程的过程中,注释编程内容是不可或缺的一个内容,这样既有利于自己看程序代码也有利于他人读懂自己编写的代码,本文咱就说明一下如何进行C语言编程代码注释注释分为单行注释和多行注释: 单行注释 单行...
  • Java只是三种注释方式。前两种分别是// 和/* */,第三种被称作说明注释,它以/** 开始,以 */结束。说明注释允许你在程序中嵌入关于程序的信息。你可以使用javadoc工具软件来生成信息,并输出到HTML文件中。说明注释...
  • C语言注释风格为 / * 注释内容 * /,从 / * 开始,到 * / 结束,中间全是它的注释内容,也就是说,C注释状态可以进行多行注释; C++注释风格为 // 注释内容,不同的是,C++只能进行单行注释。 那么要如何...
  • 这是一道百度笔试题目:设计一个有限状态机提取C语言文件中的注释这道题其实也是考了23种设计模式中状态模式 Java实现代码:import java.util.ArrayList;interface state{void handle(context con);}class text ...
  • 有些帖子还没结 给我另补分
  • 用awk去除C语言注释

    千次阅读 热门讨论 2010-01-06 22:16:00
    今天闲逛Linux宝库,看到论坛里有人在讨论如何用 shell 脚本来处理 C 语言注释,发帖时间是 08-10-23(以前怎么都没注意到,失败...),但问题好像并没被解决。正好这两天玩 sed & awk,来小试一下身手。C语句注释...
  • 我变了一个程序,读取一个txt文档内的数据,然后进行计算,当文档内只有纯数据的时候没问题,但我想给每个数据添加注释,这时候读取数据就出错了,注释的格式应该是怎样的 /*空气温度(K)*/ 250 /*温度升高系数...
  • 比如这样: #goto *black001 //跳转到black001这个标签 #stop //在这里停止运行,其实不用写,因为已经跳到了下面的标签,只是说明这里程序中断了。 ...每行字符串用const char * str 表示
  • 你的标题应该改为“请帮我给下面C程序添加注释,看e5a48de588b63231313335323631343130323136353331333363373737不懂”。#include"Wire.h"#include"I2Cdev.h"#include"ADXL345.h"ADXL345accel;//声明类型为ADXL345的...
  • OVERLAPPED结构体就没有预留用户自定义参数,通过GetQueuedCompletionStatus得到OVERLAPPED*之后,怎么得到与其对应的用户参数?举个例子 ``` ...注释1(//1)处得到op,但是此op是读的哪个文件呢?
  • 这道题有两处需要注意的地方。第一个是必须把整型变量显性转化成实型变量,做除法运算的结果才能精确的小数位。第二个是想要输出最简分数,应该先让分子分母同除它们的最大公约数,再以“%d/%d”的形式输出。...
  • 当然用//也可以作为注释,//后面的内容就是注释的内容,不过这种注释通常用于C++之中,今天就用C语言来写个小程序,是关于C语言中的注释转换,如何C语言中的注释风格转化为C++中的注释风格。 用图来表示就是:(将...
  • 作者:José M. Aguilar(西班牙语) ...下面的13个技巧向你展示如何添加代码注释,这些技巧都很容易理解和记忆。 1. 逐层注释 为每个代码块添加注释,并在每一层使用统一的注释方法和风格。例如:
  • (注意注释块的内容,对注释注释的内容进行个人修改) { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "preLaunchTask": "build", "type": "cppdbg", "request": "launch", "program": "${...
  • c语言预处理程序与注释(#error)

    千次阅读 2013-08-28 17:29:15
    本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。 4.7.1C语言的预处理程序 ANSI标准定义的C语言预处理程序包括下列命令: #define #error #include #if #else #elif #endif #if...
  • 那么我们如何来实现这个目的呢? 首先我们得有一个名为 input.c 的文件 ,里面写着一段C风格的注释和一些代码。而我们转换后的注释及代码应该保存在一个名为 output.c 的文件里。要将 input.c中的内容转换,我们就...
  • 一个数组A中存有N(&gt;0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M...如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 每个输入包含一个测试用例,第1行输入N...
  • c语言多行宏定义及其注释

    千次阅读 2014-03-18 20:40:34
    早上在写代码时遇到这样一个问题:即如何在一个拥有多行的宏定义中做注释?,这里把方法演化的过程贴出来,可能对某些朋友有些借鉴意义。 宏定义高深莫测,而且是比较细节的东西,详细说明请参见"C参考手册"之类...
  • Problem L 回文质数 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 因为151既是一个质数又是一个回文数(从左到右和从右到左看是一样的),所以151是回文质数. ...写一个程序来找出范围[a,b](5 ...
  • 如何写一个求质数的C语言程序?求大神帮帮忙,带注释 //,谢谢了 新人求助。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 724
精华内容 289
关键字:

c语言如何注释

c语言 订阅