gcc 源码阅读---语法树

c内核源码阅读准备知识(erlang mudos lua) 准备在以后的博客中主要就是写自己对一些源码的学习和理解。那再阅读之前肯定是要准备一些基础的知识的。请看: 1.         c语言 就目前的项目情况来看,无论是erlang还是java还是现在的mudos,虚拟机部分都是用c来实现的,所以呢,对编写人员的c语言掌握要求挺高,不仅需要熟知语法,还要熟悉一些习惯用法和常用技巧,系统函数的调用也必须清楚。 2.         数据结构 阅读详情

gcc 语法树定义在 tree.def中

Line 41: DEFTREECODE (ERROR_MARK, "error_mark", tcc_exceptional, 0)
    Line 47: DEFTREECODE (IDENTIFIER_NODE, "identifier_node", tcc_exceptional, 0)
    Line 54: DEFTREECODE (TREE_LIST, "tree_list", tcc_exceptional, 0)
    Line 57: DEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0)
    Line 75: DEFTREECODE (BLOCK, "block", tcc_exceptional, 0)
    Line 122: DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0)
    Line 135: DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0)
    Line 139: DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0)
    Line 145: DEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0)
    Line 152: DEFTREECODE (BITINT_TYPE, "bitint_type", tcc_type, 0)
    Line 156: DEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0)
    Line 165: DEFTREECODE (POINTER_TYPE, "pointer_type", tcc_type, 0)
    Line 169: DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0)
    Line 172: DEFTREECODE (NULLPTR_TYPE, "nullptr_type", tcc_type, 0)
    Line 177: DEFTREECODE (FIXED_POINT_TYPE, "fixed_point_type", tcc_type, 0)
    Line 186: DEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0)
    Line 191: DEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0)
    Line 207: DEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0)
    Line 217: DEFTREECODE (RECORD_TYPE, "record_type", tcc_type, 0)
    Line 223: DEFTREECODE (UNION_TYPE, "union_type", tcc_type, 0)    /* C union type */
    Line 229: DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0)
    Line 236: DEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0)
    Line 246: DEFTREECODE (FUNCTION_TYPE, "function_type", tcc_type, 0)
    Line 253: DEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0)
    Line 259: DEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0)
    Line 265: DEFTREECODE (OPAQUE_TYPE, "opaque_type", tcc_type, 0)
    Line 271: DEFTREECODE (VOID_CST, "void_cst", tcc_constant, 0)
    Line 291: DEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0)
    Line 294: DEFTREECODE (POLY_INT_CST, "poly_int_cst", tcc_constant, 0)
    Line 297: DEFTREECODE (REAL_CST, "real_cst", tcc_constant, 0)
    Line 300: DEFTREECODE (FIXED_CST, "fixed_cst", tcc_constant, 0)
    Line 304: DEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0)
    Line 307: DEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0)
    Line 310: DEFTREECODE (STRING_CST, "string_cst", tcc_constant, 0)
    Line 320: DEFTREECODE (RAW_DATA_CST, "raw_data_cst", tcc_constant, 0)
    Line 380: DEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0)
    Line 381: DEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0)
    Line 386: DEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0)
    Line 387: DEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0)
    Line 388: DEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0)
    Line 389: DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0)
    Line 390: DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)
    Line 391: DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)
    Line 395: DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0)
    Line 398: DEFTREECODE (DEBUG_BEGIN_STMT, "debug_begin_stmt", tcc_statement, 0)
    Line 402: DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)
    Line 413: DEFTREECODE (IMPORTED_DECL, "imported_decl", tcc_declaration, 0)
    Line 423: DEFTREECODE (NAMELIST_DECL, "namelist_decl", tcc_declaration, 0)
    Line 427: DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\
    Line 440: DEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3)
    Line 450: DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3)
    Line 457: DEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4)
    Line 462: DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4)
    Line 466: DEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1)
    Line 467: DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 1)
    Line 479: DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1)
    Line 482: DEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1)
    Line 495: DEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3)
    Line 522: DEFTREECODE (CONSTRUCTOR, "constructor", tcc_exceptional, 0)
    Line 525:    of DEFTREECODE saying how many operands there are.
    Line 532: DEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2)
    Line 535: DEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2)
    Line 540: DEFTREECODE (INIT_EXPR, "init_expr", tcc_expression, 2)
    Line 548: DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4)
    Line 562: DEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3)
    Line 565: DEFTREECODE (VEC_DUPLICATE_EXPR, "vec_duplicate_expr", tcc_unary, 1)
    Line 575: DEFTREECODE (VEC_SERIES_EXPR, "vec_series_expr", tcc_binary, 2)
    Line 587: DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3)
    Line 606: DEFTREECODE (VEC_PERM_EXPR, "vec_perm_expr", tcc_expression, 3)
    Line 629: DEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3)
    Line 637: DEFTREECODE (CALL_EXPR, "call_expr", tcc_vl_exp, 3)
    Line 644: DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1)
    Line 661: DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1)
    Line 713: DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", tcc_exceptional, 0)
    Line 716: DEFTREECODE (PLUS_EXPR, "plus_expr", tcc_binary

如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码? 阅读和解析 TCC(Tiny C Compiler) 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。 阅读详情

相关推荐

从零解析C语言编译器:源码结构与核心模块实现详解

编译器是连接高级编程语言与计算机硬件的关键系统软件,其核心原理是将源代码转换为机器可执行的目标代码。这一过程通常遵循经典的编译流程,包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等阶段。理解编译器的实现,对于深入掌握程序运行机制、提升系统编程能力以及参与大型编译器项目开发具有重要价值。在工程实践中,通过剖析一个中等规模、功能完整的教学型编译器源码,可以将抽象的编译原理概念(如有限自动机、递归下降解析、符号表管理)与具体的C语言代码实现一一对应。本文聚焦于一个用C语言实现的简单C编译器项目

weixin_33811539的博客 404

C++轻量级代码生成工具源码,含词法分析器与抽象语法树构建模块

一套面向嵌入式场景和DSL后端开发的C++代码生成工具源码,不依赖大型编译框架,专注静态结构解析与目标代码输出。核心组件包括lambda表达式处理(lambda.cpp)、可配置语法定义(definable.cpp)、类声明与成员自动生成功能(class.cpp)、语句与表达式AST节点构造(statement.cpp、expression.cpp)、格式化代码写入器(writer.cpp),以及支持复用的编译单元封装(component.cpp)。工程采用清晰的模块化组织:src目录存放实现逻辑,incl

n7o8p的博客 237

Gcc核心源代码分析

Gcc核心源代码分析

数码管动态扫描避坑指南:如何用188芯片实现50Hz无闪烁显示?

本文深入解析188数码管动态扫描技术,提供工业级无闪烁显示方案。通过优化轮询扫描机制、硬件电路设计和软件架构,实现50Hz高刷新率显示,解决亮度不均和鬼影问题,适用于医疗设备和工业控制面板等高要求场景。

hhh00的博客 975

在 MATLAB/Simulink 中构建一个固定地面站天线指向控制系统的完整仿真模型

在卫星通信系统中,地面站天线负责与在轨卫星建立高增益、高稳定性的通信链路。对于固定地面站(如卫星测控站、深空站、VSAT主站),天线必须具备高精度指向能力,以确保波束始终对准卫星。然而,卫星(尤其是低轨卫星)在天空中快速移动,地面站天线必须实时跟踪其轨迹。此外,环境扰动(风载、热变形、机械误差)也会导致指向偏差。因此,设计一个高精度、高鲁棒性的天线指向控制系统(Antenna Pointing Control System)至关重要。本文将手把手教你如何在中构建一个固定地面站天线指向控制系统。

amy_mhd的博客 133

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 468

【C++】【STL算法】数据窄化及代码安全性

本文系统探讨了C++工程中数据窄化(narrowing conversion)的隐患与解决方案。数据窄化指将高精度/大范围类型转换为低精度/小范围类型,虽语法合法但会导致静默精度损失。其危险性体现在:错误隐蔽、STL会放大问题、数值错误具有传播性。现代C++要求窄化必须显式声明,文中提出四种工程解决方案:显式转换、边界统一转换、范围检查转换和使用GSL工具。建议在系统边界集中处理窄化,保持计算链路类型一致性,并通过分层策略(建模用double,控制用float)确保数值稳定性。核心思想是让窄化成为清晰可控的

Double Galaxy 80

RK3568平台(USB篇)USB基础知识

现象:把USB设备比如Android手机接到PC答1:是USB控制器,是USB控制器内嵌的root hub.答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"。USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;

weixin_49303682的博客 1658

PreScan快速入门到精通第二十一讲驾驶员模型之驾驶员在环

请注意,操纵杆的输出角度是以度为单位的,而方向盘执行器希望其输入是以弧度为单位的。当选择一个支持的方向盘时,PreScan会自动将按钮映射到正确的功能上(如换挡),并设置轴的正确范围(如转向角度)。该系统中的所有其他组件都是为了提供正确的按钮映射,并为所选的方向盘设置正确的范围。对于每一个额外连接的控制器,它们的ID会增加一个,例如第二个控制器的设备ID为1,第三个控制器的设备ID为2,等等。由于所有的方向盘最初放在编译表上的设备ID都是0,所以用户应该先进行正确的调整,将每个控制器设置为正确的设备ID。.

小明师兄的博客 1423

PointPillars代码详解及实现

SourceURL:file://文字文稿1和2D图像的深度学习目标检测很不相同,点云数据具有两个显著特征,为了将图像领域卷积神经网络做模式识别的经验引入三维点云中,一些深度学习方法采用了三维卷积方法或者是将点云投射为2维深度图,还有一类方法是使用鸟瞰视角Bird’s Eye View,来组织点云数据的输入,相比于2维深度图,鸟瞰图不存在遮挡问题但是数据分布更加稀疏造成网络特征学习效率低下。

m0_47313541的博客 661

第182期 Claude Skills:深入探究Anthropic的智能体框架(一篇彻底讲透彻)

摘要: Claude Skills是Anthropic推出的智能体框架,通过连接外部工具和服务扩展Claude AI的功能,支持实时交互与任务执行。其核心架构包含技能路由器、注册表、执行引擎等模块,采用渐进式披露机制优化上下文管理。与MCP和A2A相比,Skills更注重模块化设计与Claude深度集成,通过SKILL.md文件定义可重复工作流程,兼具高效性和灵活性。开发者可创建自定义技能,遵循聚焦用户价值、安全隐私等最佳实践,实现AI能力的场景化拓展。该框架与MCP、A2A形成互补,共同推动智能体生态发展

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 2132

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: gcc 源码阅读--全局符号表管理
下一篇: gcc源码阅读--gimple 介绍
GoldKey
博客等级 码龄25年 82粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoldKey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值