您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ stackPopPtr函数代码示例

51自学网 2021-06-03 08:20:56
  C++
这篇教程C++ stackPopPtr函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中stackPopPtr函数的典型用法代码示例。如果您正苦于以下问题:C++ stackPopPtr函数的具体用法?C++ stackPopPtr怎么用?C++ stackPopPtr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了stackPopPtr函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: searchWordlist

/**************************************************************************                        s e a r c h - w o r d l i s t** SEARCH ( c-addr u wid -- 0 | xt 1 | xt -1 )** Find the definition identified by the string c-addr u in the word list** identified by wid. If the definition is not found, return zero. If the** definition is found, return its execution token xt and one (1) if the** definition is immediate, minus-one (-1) otherwise. **************************************************************************/static void searchWordlist(FICL_VM *pVM){    STRINGINFO si;    UNS16 hashCode;    FICL_WORD *pFW;    FICL_HASH *pHash = stackPopPtr(pVM->pStack);    si.count         = (FICL_COUNT)stackPopUNS(pVM->pStack);    si.cp            = stackPopPtr(pVM->pStack);    hashCode         = hashHashCode(si);    ficlLockDictionary(TRUE);    pFW = hashLookup(pHash, si, hashCode);    ficlLockDictionary(FALSE);    if (pFW)    {        stackPushPtr(pVM->pStack, pFW);        stackPushINT(pVM->pStack, (wordIsImmediate(pFW) ? 1 : -1));    }    else    {        stackPushUNS(pVM->pStack, 0);    }    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:35,


示例2: ficlWriteFile

static void ficlWriteFile(FICL_VM *pVM) /* ( c-addr u1 fileid -- ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    int length = stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    clearerr(ff->f);    fwrite(address, 1, length, ff->f);    pushIor(pVM, ferror(ff->f) == 0);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:10,


示例3: ficlWriteLine

static void ficlWriteLine(FICL_VM *pVM) /* ( c-addr u1 fileid -- ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    size_t length = (size_t)stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    clearerr(ff->f);    if (fwrite(address, 1, length, ff->f) == length)        fwrite("/n", 1, 1, ff->f);    pushIor(pVM, ferror(ff->f) == 0);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:11,


示例4: setParentWid

/**************************************************************************                        setParentWid** FICL** setparentwid   ( parent-wid wid -- )** Set WID's link field to the parent-wid. search-wordlist will ** iterate through all the links when finding words in the child wid.**************************************************************************/static void setParentWid(FICL_VM *pVM){    FICL_HASH *parent, *child;#if FICL_ROBUST > 1    vmCheckStack(pVM, 2, 0);#endif    child  = (FICL_HASH *)stackPopPtr(pVM->pStack);    parent = (FICL_HASH *)stackPopPtr(pVM->pStack);    child->link = parent;    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:19,


示例5: ficlReadFile

static void ficlReadFile(FICL_VM *pVM) /* ( c-addr u1 fileid -- u2 ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    int length = stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    int result;    clearerr(ff->f);    result = fread(address, 1, length, ff->f);    stackPushINT(pVM->pStack, result);    pushIor(pVM, ferror(ff->f) == 0);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:13,


示例6: ficlUnsetenv

voidficlUnsetenv(FICL_VM *pVM){#ifndef TESTMAIN	char	*name;#endif	char	*namep;	int	names;#if FICL_ROBUST > 1	vmCheckStack(pVM, 2, 0);#endif	names = stackPopINT(pVM->pStack);	namep = (char*) stackPopPtr(pVM->pStack);#ifndef TESTMAIN	name = (char*) ficlMalloc(names+1);	if (!name)		vmThrowErr(pVM, "Error: out of memory");	strncpy(name, namep, names);	name[names] = '/0';	unsetenv(name);	ficlFree(name);#endif	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:28,


示例7: ficlGetenv

voidficlGetenv(FICL_VM *pVM){#ifndef TESTMAIN	char	*name;#endif	char	*namep, *value;	int	names;#if FICL_ROBUST > 1	vmCheckStack(pVM, 2, 2);#endif	names = stackPopINT(pVM->pStack);	namep = (char*) stackPopPtr(pVM->pStack);#ifndef TESTMAIN	name = (char*) ficlMalloc(names+1);	if (!name)		vmThrowErr(pVM, "Error: out of memory");	strncpy(name, namep, names);	name[names] = '/0';	value = getenv(name);	ficlFree(name);	if(value != NULL) {		stackPushPtr(pVM->pStack, value);		stackPushINT(pVM->pStack, strlen(value));	} else#endif		stackPushINT(pVM->pStack, -1);	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:34,


示例8: setOrder

/**************************************************************************                        s e t - o r d e r** SEARCH ( widn ... wid1 n -- )** Set the search order to the word lists identified by widn ... wid1.** Subsequently, word list wid1 will be searched first, and word list** widn searched last. If n is zero, empty the search order. If n is minus** one, set the search order to the implementation-defined minimum** search order. The minimum search order shall include the words** FORTH-WORDLIST and SET-ORDER. A system shall allow n to** be at least eight.**************************************************************************/static void setOrder(FICL_VM *pVM){    int i;    int nLists = stackPopINT(pVM->pStack);    FICL_DICT *dp = vmGetDict(pVM);    if (nLists > FICL_DEFAULT_VOCS)    {        vmThrowErr(pVM, "set-order error: list would be too large");    }    ficlLockDictionary(TRUE);    if (nLists >= 0)    {        dp->nLists = nLists;        for (i = nLists-1; i >= 0; --i)        {            dp->pSearch[i] = stackPopPtr(pVM->pStack);        }    }    else    {        dictResetSearchOrder(dp);    }    ficlLockDictionary(FALSE);    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:40,


示例9: ficlUuidToString

voidficlUuidToString(FICL_VM *pVM){#ifndef	TESTMAIN	char	*uuid;	uint32_t status;#endif	uuid_t	*u;#if FICL_ROBUST > 1	vmCheckStack(pVM, 1, 0);#endif	u = (uuid_t *)stackPopPtr(pVM->pStack);#ifndef	TESTMAIN	uuid_to_string(u, &uuid, &status);	if (status != uuid_s_ok) {		stackPushPtr(pVM->pStack, uuid);		stackPushINT(pVM->pStack, strlen(uuid));	} else#endif		stackPushINT(pVM->pStack, -1);	return;}
开发者ID:jaredmcneill,项目名称:freebsd,代码行数:26,


示例10: ficlCcall

voidficlCcall(FICL_VM *pVM){	int (*func)(int, ...);	int result, p[10];	int nparam, i;#if FICL_ROBUST > 1	vmCheckStack(pVM, 2, 0);#endif	func = stackPopPtr(pVM->pStack);	nparam = stackPopINT(pVM->pStack);#if FICL_ROBUST > 1	vmCheckStack(pVM, nparam, 1);#endif	for (i = 0; i < nparam; i++)		p[i] = stackPopINT(pVM->pStack);	result = func(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8],	    p[9]);	stackPushINT(pVM->pStack, result);	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:28,


示例11: ficlFileSize

static void ficlFileSize(FICL_VM *pVM) /* ( fileid -- ud ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    long ud = fileSize(ff->f);    stackPushINT(pVM->pStack, ud);    pushIor(pVM, ud != -1);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:7,


示例12: ficlRepositionFile

static void ficlRepositionFile(FICL_VM *pVM) /* ( ud fileid -- ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    size_t ud = (size_t)stackPopINT(pVM->pStack);    pushIor(pVM, fseek(ff->f, ud, SEEK_SET) == 0);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:7,


示例13: ficlFileStatus

static void ficlFileStatus(FICL_VM *pVM) /* ( c-addr u -- x ior ) */{    struct stat statbuf;    int length = stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    char *filename = (char *)alloca(length + 1);    memcpy(filename, address, length);    filename[length] = 0;    if (stat(filename, &statbuf) == 0)    {        /*        ** the "x" left on the stack is implementation-defined.        ** I push the file's access mode (readable, writeable, is directory, etc)        ** as defined by ANSI C.        */        stackPushINT(pVM->pStack, statbuf.st_mode);        stackPushINT(pVM->pStack, 0);    }    else    {        stackPushINT(pVM->pStack, -1);        stackPushINT(pVM->pStack, ENOENT);    }}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:27,


示例14: ficlResizeFile

static void ficlResizeFile(FICL_VM *pVM) /* ( ud fileid -- ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    size_t ud = (size_t)stackPopINT(pVM->pStack);    pushIor(pVM, ftruncate(fileno(ff->f), ud) == 0);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:7,


示例15: pfopen

/*          fopen - open a file and return new fd on stack. * * fopen ( ptr count mode -- fd ) */static void pfopen(FICL_VM *pVM){    int     mode, fd, count;    char    *ptr, *name;#if FICL_ROBUST > 1    vmCheckStack(pVM, 3, 1);#endif    mode = stackPopINT(pVM->pStack);    /* get mode */    count = stackPopINT(pVM->pStack);   /* get count */    ptr = stackPopPtr(pVM->pStack);     /* get ptr */    if ((count < 0) || (ptr == NULL)) {        stackPushINT(pVM->pStack, -1);        return;    }    /* ensure that the string is null terminated */    name = (char *)malloc(count+1);    bcopy(ptr,name,count);    name[count] = 0;    /* open the file */    fd = open(name, mode);    free(name);    stackPushINT(pVM->pStack, fd);    return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:33,


示例16: seeXT

/*** Here's the outer part of the decompiler. It's ** just a big nested conditional that checks the** CFA of the word to decompile for each kind of** known word-builder code, and tries to do ** something appropriate. If the CFA is not recognized,** just indicate that it is a primitive.*/static void seeXT(FICL_VM *pVM){    FICL_WORD *pFW;    WORDKIND kind;    pFW = (FICL_WORD *)stackPopPtr(pVM->pStack);    kind = ficlWordClassify(pFW);    switch (kind)    {    case COLON:        sprintf(pVM->pad, ": %.*s", pFW->nName, pFW->name);        vmTextOut(pVM, pVM->pad, 1);        seeColon(pVM, pFW->param);        break;    case DOES:        vmTextOut(pVM, "does>", 1);        seeColon(pVM, (CELL *)pFW->param->p);        break;    case CREATE:        vmTextOut(pVM, "create", 1);        break;    case VARIABLE:        sprintf(pVM->pad, "variable = %ld (%#lx)", pFW->param->i, pFW->param->u);        vmTextOut(pVM, pVM->pad, 1);        break;#if FICL_WANT_USER    case USER:        sprintf(pVM->pad, "user variable %ld (%#lx)", pFW->param->i, pFW->param->u);        vmTextOut(pVM, pVM->pad, 1);        break;#endif    case CONSTANT:        sprintf(pVM->pad, "constant = %ld (%#lx)", pFW->param->i, pFW->param->u);        vmTextOut(pVM, pVM->pad, 1);    default:        sprintf(pVM->pad, "%.*s is a primitive", pFW->nName, pFW->name);        vmTextOut(pVM, pVM->pad, 1);        break;    }    if (pFW->flags & FW_IMMEDIATE)    {        vmTextOut(pVM, "immediate", 1);    }    if (pFW->flags & FW_COMPILE)    {        vmTextOut(pVM, "compile-only", 1);    }    return;}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:67,


示例17: setCurrent

/**************************************************************************                        s e t - c u r r e n t** SEARCH ( wid -- )** Set the compilation word list to the word list identified by wid. **************************************************************************/static void setCurrent(FICL_VM *pVM){    FICL_HASH *pHash = stackPopPtr(pVM->pStack);    FICL_DICT *pDict = vmGetDict(pVM);    ficlLockDictionary(TRUE);    pDict->pCompile = pHash;    ficlLockDictionary(FALSE);    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:14,


示例18: ficlDeleteFile

static void ficlDeleteFile(FICL_VM *pVM) /* ( c-addr u -- ior ) */{    int length = stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    char *filename = (char *)alloca(length + 1);    memcpy(filename, address, length);    filename[length] = 0;    pushIor(pVM, !unlink(filename));}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:11,


示例19: execxt

static void execxt(FICL_VM *pVM){    FICL_WORD *pFW;#if FICL_ROBUST > 1    vmCheckStack(pVM, 1, 0);#endif    pFW = stackPopPtr(pVM->pStack);    ficlExecXT(pVM, pFW);    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:12,


示例20: ficlRenameFile

static void ficlRenameFile(FICL_VM *pVM) /* ( c-addr1 u1 c-addr2 u2 -- ior ) */{    int length;    void *address;    char *from;    char *to;    length = stackPopINT(pVM->pStack);    address = (void *)stackPopPtr(pVM->pStack);    to = (char *)alloca(length + 1);    memcpy(to, address, length);    to[length] = 0;    length = stackPopINT(pVM->pStack);    address = (void *)stackPopPtr(pVM->pStack);    from = (char *)alloca(length + 1);    memcpy(from, address, length);    from[length] = 0;    pushIor(pVM, !rename(from, to));}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:22,


示例21: searchPush

/**************************************************************************                        > S E A R C H** ficl  ( wid -- )** Push wid onto the search order. Error if the search order is full.**************************************************************************/static void searchPush(FICL_VM *pVM){    FICL_DICT *dp = vmGetDict(pVM);    ficlLockDictionary(TRUE);    if (dp->nLists > FICL_DEFAULT_VOCS)    {        vmThrowErr(pVM, ">search error: search order overflow");    }    dp->pSearch[dp->nLists++] = stackPopPtr(pVM->pStack);    ficlLockDictionary(FALSE);    return;}
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:18,


示例22: ficlReadLine

static void ficlReadLine(FICL_VM *pVM) /* ( c-addr u1 fileid -- u2 flag ior ) */{    ficlFILE *ff = (ficlFILE *)stackPopPtr(pVM->pStack);    int length = stackPopINT(pVM->pStack);    char *address = (char *)stackPopPtr(pVM->pStack);    int error;    int flag;    if (feof(ff->f))        {        stackPushINT(pVM->pStack, -1);        stackPushINT(pVM->pStack, 0);        stackPushINT(pVM->pStack, 0);        return;        }    clearerr(ff->f);    *address = 0;    fgets(address, length, ff->f);    error = ferror(ff->f);    if (error != 0)        {        stackPushINT(pVM->pStack, -1);        stackPushINT(pVM->pStack, 0);        stackPushINT(pVM->pStack, error);        return;        }    length = strlen(address);    flag = (length > 0);    if (length && ((address[length - 1] == '/r') || (address[length - 1] == '/n')))        length--;        stackPushINT(pVM->pStack, length);    stackPushINT(pVM->pStack, flag);    stackPushINT(pVM->pStack, 0); /* ior */}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:38,


示例23: ficlFindfile

voidficlFindfile(FICL_VM *pVM){#ifndef TESTMAIN	char	*name;#endif	char	*type, *namep, *typep;	struct	preloaded_file* fp;	int	names, types;#if FICL_ROBUST > 1	vmCheckStack(pVM, 4, 1);#endif	types = stackPopINT(pVM->pStack);	typep = (char*) stackPopPtr(pVM->pStack);	names = stackPopINT(pVM->pStack);	namep = (char*) stackPopPtr(pVM->pStack);#ifndef TESTMAIN	name = (char*) ficlMalloc(names+1);	if (!name)		vmThrowErr(pVM, "Error: out of memory");	strncpy(name, namep, names);	name[names] = '/0';	type = (char*) ficlMalloc(types+1);	if (!type)		vmThrowErr(pVM, "Error: out of memory");	strncpy(type, typep, types);	type[types] = '/0';	fp = file_findfile(name, type);#else	fp = NULL;#endif	stackPushPtr(pVM->pStack, fp);	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:38,


示例24: ficlSetenvq

voidficlSetenvq(FICL_VM *pVM){#ifndef TESTMAIN	char	*name, *value;#endif	char	*namep, *valuep;	int	names, values, overwrite;#if FICL_ROBUST > 1	vmCheckStack(pVM, 5, 0);#endif	overwrite = stackPopINT(pVM->pStack);	names = stackPopINT(pVM->pStack);	namep = (char*) stackPopPtr(pVM->pStack);	values = stackPopINT(pVM->pStack);	valuep = (char*) stackPopPtr(pVM->pStack);#ifndef TESTMAIN	name = (char*) ficlMalloc(names+1);	if (!name)		vmThrowErr(pVM, "Error: out of memory");	strncpy(name, namep, names);	name[names] = '/0';	value = (char*) ficlMalloc(values+1);	if (!value)		vmThrowErr(pVM, "Error: out of memory");	strncpy(value, valuep, values);	value[values] = '/0';	setenv(name, value, overwrite);	ficlFree(name);	ficlFree(value);#endif	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:37,


示例25: ficlFopen

static void ficlFopen(FICL_VM *pVM, char *writeMode) /* ( c-addr u fam -- fileid ior ) */{    int fam = stackPopINT(pVM->pStack);    int length = stackPopINT(pVM->pStack);    void *address = (void *)stackPopPtr(pVM->pStack);    char mode[4];    FILE *f;    char *filename = (char *)alloca(length + 1);    memcpy(filename, address, length);    filename[length] = 0;    *mode = 0;    switch (FICL_FAM_OPEN_MODE(fam))        {        case 0:            stackPushPtr(pVM->pStack, NULL);            stackPushINT(pVM->pStack, EINVAL);            return;        case FICL_FAM_READ:            strcat(mode, "r");            break;        case FICL_FAM_WRITE:            strcat(mode, writeMode);            break;        case FICL_FAM_READ | FICL_FAM_WRITE:            strcat(mode, writeMode);            strcat(mode, "+");            break;        }    strcat(mode, (fam & FICL_FAM_BINARY) ? "b" : "t");    f = fopen(filename, mode);    if (f == NULL)        stackPushPtr(pVM->pStack, NULL);    else        {        ficlFILE *ff = (ficlFILE *)malloc(sizeof(ficlFILE));        strcpy(ff->filename, filename);        ff->f = f;        stackPushPtr(pVM->pStack, ff);        fseek(f, 0, SEEK_SET);        }    pushIor(pVM, f != NULL);}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:48,


示例26: pfwrite

/*          fwrite - write file contents * * fwrite  ( fd buf nbytes  -- nwritten ) */static void pfwrite(FICL_VM *pVM){    int     fd, len;    char *buf;#if FICL_ROBUST > 1    vmCheckStack(pVM, 3, 1);#endif    len = stackPopINT(pVM->pStack); /* get number of bytes to read */    buf = stackPopPtr(pVM->pStack); /* get buffer */    fd = stackPopINT(pVM->pStack); /* get fd */    if (len > 0 && buf && fd != -1)	stackPushINT(pVM->pStack, write(fd, buf, len));    else	stackPushINT(pVM->pStack, -1);    return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:21,


示例27: ficlUuidFromString

voidficlUuidFromString(FICL_VM *pVM){#ifndef	TESTMAIN	char	*uuid;	uint32_t status;#endif	char	*uuidp;	int	uuids;	uuid_t	*u;#if FICL_ROBUST > 1	vmCheckStack(pVM, 2, 0);#endif	uuids = stackPopINT(pVM->pStack);	uuidp = (char *) stackPopPtr(pVM->pStack);#ifndef	TESTMAIN	uuid = (char *)ficlMalloc(uuids + 1);	if (!uuid)		vmThrowErr(pVM, "Error: out of memory");	strncpy(uuid, uuidp, uuids);	uuid[uuids] = '/0';	u = (uuid_t *)ficlMalloc(sizeof (*u));	uuid_from_string(uuid, u, &status);	ficlFree(uuid);	if (status != uuid_s_ok) {		ficlFree(u);		u = NULL;	}#else	u = NULL;#endif	stackPushPtr(pVM->pStack, u);	return;}
开发者ID:jaredmcneill,项目名称:freebsd,代码行数:41,


示例28: ficlCopyout

voidficlCopyout(FICL_VM *pVM){	void*		dest;	vm_offset_t	src;	size_t		len;#if FICL_ROBUST > 1	vmCheckStack(pVM, 3, 0);#endif	len = stackPopINT(pVM->pStack);	dest = stackPopPtr(pVM->pStack);	src = stackPopINT(pVM->pStack);#ifndef TESTMAIN	archsw.arch_copyout(src, dest, len);#endif	return;}
开发者ID:AhmadTux,项目名称:freebsd,代码行数:21,


示例29: stackUnlink

void stackUnlink(FICL_STACK *pStack){    pStack->sp = pStack->pFrame;    pStack->pFrame = stackPopPtr(pStack);    return;}
开发者ID:UnitedMarsupials,项目名称:kame,代码行数:6,



注:本文中的stackPopPtr函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ stackPos函数代码示例
C++ stackPopParams函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。