error: #29: expected an expression,error: #140: too many arguments in function call

本文分享了STM32新手常犯的一个错误——在函数调用时误用了数据类型。通过一个具体例子说明了正确的函数调用方式,并鼓励新手相互学习进步。
新手学习stm32遇到的小问题分享:小白有时候头脑发热就会出现低级错误,以此自戒,函数调用出现错误,函数只有在定义或声明时需要定义参数才需要用到数据类型,如果调用时再使用数据类型就会出现一下问题,只需把RCC_Config(void);改为RCC_Config();即可,望新手共同进步~~
  
  
  
*** Using Compiler &#39;V5.06 update 5 (build 528)&#39;, folder: &#39;D:\Keil5\ARM\ARMCC\Bin&#39; Build target &#39;Target 1&#39; compiling main.c... User\main.c(51): error: #147-D: declaration is incompatible with "void GPIO_Init(GPIO_TypeDef *, GPIO_InitTypeDef *)" (declared at line 351 of ".\Library\stm32f10x_gpio.h") void GPIO_Init(void) { User\main.c(60): error: #140: too many arguments in function call GPIO_Init( PIOA, &gpio); User\main.c(66): error: #140: too many arguments in function call GPIO_Init( PIOB, &gpio); User\main.c(70): error: #140: too many arguments in function call GPIO_Init( PIOB, &gpio); User\main.c(76): error: #140: too many arguments in function call GPIO_Init( PIOB, &gpio); User\main.c(228): warning: #223-D: function "PAin" declared implicitly uint8_t current = ( NCODER_A << 1) | ENCODER_B; User\main.c(262): warning: #223-D: function "PAin" declared implicitly encoder_last = ( NCODER_A << 1) | ENCODER_B; User\main.c(268): warning: #223-D: function "PBout" declared implicitly OTOR_AIN1 = 1; User\main.c(268): error: #137: expression must be a modifiable lvalue OTOR_AIN1 = 1; User\main.c(269): error: #137: expression must be a modifiable lvalue OTOR_AIN2 = 0; User\main.c(272): warning: #223-D: function "PBout" declared implicitly OTOR_AIN1 = 0; User\main.c(272): error: #137: expression must be a modifiable lvalue OTOR_AIN1 = 0; User\main.c(273): error: #137: expression must be a modifiable lvalue OTOR_AIN2 = 1; User\main.c(276): warning: #223-D: function "PBout" declared implicitly OTOR_AIN1 = 0; User\main.c(276): error: #137: expression must be a modifiable lvalue OTOR_AIN1 = 0; User\main.c(277): error: #137: expression must be a modifiable lvalue OTOR_AIN2 = 0; User\main.c(289): warning: #1-D: last line of file ends without a newline User\main.c(289): error: At end of source: #67: expected a "}" User\main.c: 6 warnings, 12 errors ".\Objects\project.axf" - 12 Error(s), 6 Warning(s). Target not created. Build Time Elapsed: 00:00:01
最新发布
11-24
Rebuild started: Project: uartprintf *** Using Compiler &#39;V5.06 update 6 (build 750)&#39;, folder: &#39;D:\keil_mdk\ARM\ARMCC\Bin&#39; Rebuild target &#39;uartprintf&#39; compiling stm32l4xx_hal_tim_ex.c... compiling stm32l4xx_hal_msp.c... compiling stm32l4xx_hal_tim.c... compiling stm32l4xx_hal_uart_ex.c... compiling stm32l4xx_it.c... compiling usart.c... compiling gpio.c... compiling main.c... ../Src/main.c(69): error: #140: too many arguments in function call uwRet = LOS_TaskCreate(&taskId1, NULL, (VOID *)Task1, 0x800, 4, 0, 0, 0); // ??Task1 ../Src/main.c(75): error: #140: too many arguments in function call uwRet = LOS_TaskCreate(&taskId2, NULL, (VOID *)Task2, 0x800, 4, 0, 0, 0); // ??Task2 ../Src/main.c(81): error: #159: declaration is incompatible with previous "AppTaskCreate" (declared at line 51) UINT32 AppTaskCreate(VOID) { ../Src/main.c(81): error: #65: expected a ";" UINT32 AppTaskCreate(VOID) { ../Src/main.c(102): warning: #12-D: parsing restarts here after previous syntax error return -1; ../Src/main.c(103): warning: #940-D: missing return statement at end of non-void function "AppTaskCreate" } ../Src/main.c(68): warning: #177-D: variable "taskId3" was declared but never referenced UINT32 taskId1, taskId2, taskId3; ../Src/main.c(105): error: #77-D: this declaration has no storage class or type specifier uwRet = LOS_TaskCreate(&taskId2, NULL, (VOID *)Task2, 0x800, 4, 0, 0, 0); ../Src/main.c(105): error: #59: function call is not allowed in a constant expression uwRet = LOS_TaskCreate(&taskId2, NULL, (VOID *)Task2, 0x800, 4, 0, 0, 0); ../Src/main.c(105): error: #20: identifier "taskId2" is undefined uwRet = LOS_TaskCreate(&taskId2, NULL, (VOID *)Task2, 0x800, 4, 0, 0, 0); ../Src/main.c(106): error: #169: expected a declaration if (uwRet != LOS_OK) { ../Src/main.c(111): warning: #12-D: parsing restarts here after previous syntax error uwRet = LOS_TaskCreate(&taskId3, NULL, (VOID *)Task3, 0x800, 4, 0, 0, 0); ../Src/main.c(112): error: #169: expected a declaration if (uwRet != LOS_OK) { ../Src/main.c(118): warning: #12-D: parsing restarts here after previous syntax error LOS_SemPost(g_semTask1ToTask2); ../Src/main.c(120): error: #169: expected a declaration return 0; ../Src/main.c(121): error: #169: expected a declaration } ../Src/main.c(128): warning: #12-D: parsing restarts here after previous syntax error LOS_SemPost(g_semTask1ToTask2); ../Src/main.c(130): error: #169: expected a declaration return 0; ../Src/main.c(131): warning: #1-D: last line of file ends without a newline } ../Src/main.c(131): error: #169: expected a declaration } ../Src/main.c: 7 warnings, 13 errors compiling stm32l4xx_hal.c... compiling stm32l4xx_hal_uart.c... compiling stm32l4xx_hal_i2c.c... compiling stm32l4xx_hal_dma_ex.c... compiling stm32l4xx_hal_i2c_ex.c... compiling stm32l4xx_hal_gpio.c... compiling stm32l4xx_hal_pwr.c... compiling stm32l4xx_hal_flash_ramfunc.c... compiling stm32l4xx_hal_flash.c... compiling stm32l4xx_hal_dma.c... compiling stm32l4xx_hal_flash_ex.c... assembling los_startup_keil.s... compiling stm32l4xx_hal_pwr_ex.c... assembling los_dispatch_keil.S... compiling stm32l4xx_hal_rcc.c... compiling stm32l4xx_hal_rcc_ex.c... compiling system_stm32l4xx.c... compiling stm32l4xx_hal_exti.c... compiling stm32l4xx_hal_cortex.c... compiling los_hwi.c... ..\liteos\arch\arm\arm-m\src\los_hwi.c(219): warning: #186-D: pointless comparison of unsigned integer with zero if ((usHwiPrio > OS_HWI_PRIO_LOWEST) || (usHwiPrio < OS_HWI_PRIO_HIGHEST)) ..\liteos\arch\arm\arm-m\src\los_hwi.c: 1 warning, 0 errors compiling los_sys.c... compiling los_hw_tick.c... compiling los_hw.c... compiling los_tick.c... compiling los_priqueue.c... compiling los_swtmr.c... compiling los_task.c... compiling los_event.c... compiling los_memcheck.c... compiling los_slabmem.c... compiling los_mux.c... compiling los_timeslice.c... compiling los_heap.c... compiling los_memstat.c... compiling los_sem.c... compiling los_slab.c... compiling los_memory.c... compiling los_queue.c... compiling los_err.c... compiling los_membox.c... compiling los_misc.c... compiling los_init.c... compiling los_tickless.c... compiling cmsis_liteos.c... "uartprintf\uartprintf.axf" - 13 Error(s), 8 Warning(s). Target not created. Build Time Elapsed: 00:00:24 根据这个帮我改一下错误
06-10
home/kiki/Desktop/rwProcMem_module/linux_kernel_api.h:39:29: error: too many arguments to function call, expected single argument &#39;pte&#39;, have 2 arguments 39 | return pte_mkwrite(pte, &vma); | ~~~~~~~~~~~ ^~~~ ../arch/arm64/include/asm/pgtable.h:174:21: note: &#39;pte_mkwrite&#39; declared here 174 | static inline pte_t pte_mkwrite(pte_t pte) | ^ ~~~~~~~~~ In file included from /home/kiki/Desktop/rwProcMem_module/sys.c:1: In file included from /home/kiki/Desktop/rwProcMem_module/sys.h:19: In file included from /home/kiki/Desktop/rwProcMem_module/api_proxy.h:4: /home/kiki/Desktop/rwProcMem_module/linux_kernel_api.h:91:29: error: too few arguments provided to function-like macro invocation 91 | return class_create(name); | ^ ../include/linux/device/class.h:265:9: note: macro &#39;class_create&#39; defined here 265 | #define class_create(owner, name) \ | ^ In file included from /home/kiki/Desktop/rwProcMem_module/sys.c:1: In file included from /home/kiki/Desktop/rwProcMem_module/sys.h:19: In file included from /home/kiki/Desktop/rwProcMem_module/api_proxy.h:4: /home/kiki/Desktop/rwProcMem_module/linux_kernel_api.h:91:12: error: use of undeclared identifier &#39;class_create&#39; 91 | return class_create(name); | ^ In file included from /home/kiki/Desktop/rwProcMem_module/sys.c:1: In file included from /home/kiki/Desktop/rwProcMem_module/sys.h:22: In file included from /home/kiki/Desktop/rwProcMem_module/proc_maps.h:30: /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:197:3: error: implicit declaration of function &#39;VMA_ITERATOR&#39; [-Werror,-Wimplicit-function-declaration] 197 | VMA_ITERATOR(iter, mm, 0); | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:197:16: error: use of undeclared identifier &#39;iter&#39; 197 | VMA_ITERATOR(iter, mm, 0); | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:198:3: error: implicit declaration of function &#39;for_each_vma&#39; [-Werror,-Wimplicit-function-declaration] 198 | for_each_vma(iter, vma) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:198:26: error: expected &#39;;&#39; after expression 198 | for_each_vma(iter, vma) { | ^ | ; /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:198:16: error: use of undeclared identifier &#39;iter&#39; 198 | for_each_vma(iter, vma) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps_auto_offset.h:200:5: error: &#39;break&#39; statement not in loop or switch statement 200 | break; | ^ In file included from /home/kiki/Desktop/rwProcMem_module/sys.c:1: In file included from /home/kiki/Desktop/rwProcMem_module/sys.h:22: /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3369:3: error: implicit declaration of function &#39;VMA_ITERATOR&#39; [-Werror,-Wimplicit-function-declaration] 3369 | VMA_ITERATOR(iter, mm, 0); | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3369:16: error: use of undeclared identifier &#39;iter&#39; 3369 | VMA_ITERATOR(iter, mm, 0); | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3370:3: error: implicit declaration of function &#39;for_each_vma&#39; [-Werror,-Wimplicit-function-declaration] 3370 | for_each_vma(iter, vma) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3370:26: error: expected &#39;;&#39; after expression 3370 | for_each_vma(iter, vma) { | ^ | ; /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3370:16: error: use of undeclared identifier &#39;iter&#39; 3370 | for_each_vma(iter, vma) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3379:5: error: &#39;break&#39; statement not in loop or switch statement 3379 | break; | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3403:15: error: implicit declaration of function &#39;vma_is_initial_heap&#39; [-Werror,-Wimplicit-function-declaration] 3403 | } else if (vma_is_initial_heap(vma)) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3405:15: error: implicit declaration of function &#39;vma_is_initial_stack&#39; [-Werror,-Wimplicit-function-declaration] 3405 | } else if (vma_is_initial_stack(vma)) { | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3408:17: error: implicit declaration of function &#39;anon_vma_name&#39; [-Werror,-Wimplicit-function-declaration] 3408 | anon_name = anon_vma_name(vma); | ^ /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3408:17: note: did you mean &#39;arch_vma_name&#39;? ../include/linux/mm.h:3216:14: note: &#39;arch_vma_name&#39; declared here 3216 | const char * arch_vma_name(struct vm_area_struct *vma); | ^ In file included from /home/kiki/Desktop/rwProcMem_module/sys.c:1: In file included from /home/kiki/Desktop/rwProcMem_module/sys.h:22: /home/kiki/Desktop/rwProcMem_module/proc_maps.h:3408:15: error: incompatible integer to pointer conversion assigning to &#39;struct anon_vma_name *&#39; from &#39;int&#39; [-Wint-conversion] 3408 | anon_name = anon_vma_name(vma); | ^ ~~~~~~~~~~~~~~~~~~ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. make[3]: *** [../scripts/Makefile.build:273:/home/kiki/Desktop/rwProcMem_module/sys.o] 错误 1 make[2]: *** [/home/kiki/Desktop/5.1-common/Makefile:1931:/home/kiki/Desktop/rwProcMem_module] 错误 2 make[1]: *** [../Makefile:192:__sub-make] 错误 2 make[1]: 离开目录“/home/kiki/Desktop/5.1-common/out” make: *** [Makefile:10:all] 错误 2
06-21
Build started: Project: rt1064 *** Using Compiler &#39;V6.19&#39;, folder: &#39;D:\MDK\ARM\ARMCLANG\Bin&#39; Build target &#39;nor_sdram_zf_dtcm&#39; ../user/src/main.c(63): error: unknown type name &#39;imu660ra_data_t&#39; void imu_attitude_update(imu660ra_data_t *imu_data) ^ ../user/src/main.c(98): error: too many arguments to function call, expected 0, have 4 ips200_clear(0, 60, 239, 159); ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~ ../../libraries/zf_device\zf_device_ips200.h(154): note: &#39;ips200_clear&#39; declared here void ips200_clear (void); ^ ../user/src/main.c(122): error: unknown type name &#39;imu660ra_data_t&#39; void display_raw_data(imu660ra_data_t *imu_data) ^ ../user/src/main.c(141): warning: initializer-string for char array is too long [-Wexcess-initializers] char roll_bar[21] = "|..........|.........."; ^~~~~~~~~~~~~~~~~~~~~~~~ ../user/src/main.c(163): error: too many arguments to function call, expected 0, have 4 ips200_clear(0, 0, 239, 319); ~~~~~~~~~~~~ ^~~~~~~~~~~~~~ ../../libraries/zf_device\zf_device_ips200.h(154): note: &#39;ips200_clear&#39; declared here void ips200_clear (void); ^ ../user/src/main.c(182): error: expected &#39;;&#39; after expression imu660ra_data_t imu_data; ^ ; ../user/src/main.c(182): error: use of undeclared identifier &#39;imu660ra_data_t&#39; imu660ra_data_t imu_data; ^ ../user/src/main.c(182): error: use of undeclared identifier &#39;imu_data&#39; imu660ra_data_t imu_data; ^ ../user/src/main.c(183): error: call to undeclared function &#39;systick_get_count&#39;; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] uint32_t last_time = systick_get_count(); ^ ../user/src/main.c(188): error: call to undeclared function &#39;imu660ra_get_data&#39;; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] if(imu660ra_get_data(&imu_data)) ^ ../user/src/main.c(188): note: did you mean &#39;imu660ra_get_acc&#39;? ../../libraries/zf_device\zf_device_imu660ra.h(131): note: &#39;imu660ra_get_acc&#39; declared here void imu660ra_get_acc (void); // <BB><F1>取 IMU660RA <BC><D3><CB>俣燃<C6><CA><FD><BE><DD> ^ ../user/src/main.c(188): error: use of undeclared identifier &#39;imu_data&#39; if(imu660ra_get_data(&imu_data)) ^ ../user/src/main.c(197): error: use of undeclared identifier &#39;imu_data&#39; imu_attitude_update(&imu_data); ^ ../user/src/main.c(203): error: use of undeclared identifier &#39;imu_data&#39; display_raw_data(&imu_data); ^ 1 warning and 12 errors generated. compiling main.c... ".\Objects\rt1064.axf" - 12 Error(s), 1 Warning(s). Target not created. Build Time Elapsed: 00:00:05修改
10-10
<think>我们正在解决Keil编译错误#140:函数调用中参数过多的问题。这个错误通常发生在调用函数时传递的参数个数超过了函数声明中定义的参数个数。以下将详细解释原因并提供解决方案。 ### 错误原因分析 1. **函数声明与调用不匹配**:在函数声明中定义了固定数量的参数,但在调用时传递了更多的参数。 2. **函数原型未声明或声明错误**:如果函数在使用前没有声明,或者声明不正确(如参数数量不对),编译器可能无法检查参数匹配。 3. **函数重定义**:可能在代码的不同位置对同一个函数进行了不同的声明,导致编译器混淆。 4. **宏定义干扰**:某些宏可能会改变函数调用的实际参数数量。 ### 解决方案 #### 1. 检查函数声明和调用是否一致 假设有如下函数声明: ```c void myFunction(int a, int b); // 声明两个参数 ``` 但在调用时却传递了三个参数: ```c myFunction(1, 2, 3); // 错误:传递了三个参数 ``` 修正方法:确保调用时传递的参数数量与声明一致。 #### 2. 检查函数原型 如果函数在使用前没有声明,编译器可能会根据第一次调用推断原型,导致后续错误。建议在使用函数前显式声明函数原型。 例如,在头文件中声明: ```c // myHeader.h void myFunction(int a, int b); // 正确声明 ``` 然后在源文件中包含该头文件。 #### 3. 检查函数重定义 如果函数在多个地方被声明为不同的形式,会导致冲突。确保整个项目中函数只有一种声明。 #### 4. 检查宏定义 某些宏可能会改变函数调用的实际参数数量。例如: ```c #define myFunction(a, b, c) realFunction(a, b) ``` 在这种情况下,调用`myFunction(1,2,3)`会被替换成`realFunction(1,2)`,但编译器在预处理前会检查参数数量,因此如果原函数声明为两个参数,而调用时用了三个,就会报错。 检查宏定义,确保它们不会导致参数数量不一致。 ### 实例演示 假设有以下代码: ```c // 函数声明 void display(int x, int y); int main() { display(10, 20, 30); // 错误:参数太多 return 0; } void display(int a, int b) { // ... } ``` 修正后: ```c int main() { display(10, 20); // 正确:两个参数 return 0; } ``` ### 使用可变参数函数(如果需要传递不同数量的参数) 如果确实需要传递不同数量的参数,可以考虑使用可变参数函数(如`printf`)。例如: ```c #include <stdarg.h> void myVarFunc(int num, ...) { va_list args; va_start(args, num); // 使用参数 va_end(args); } // 调用 myVarFunc(3, 10, 20, 30); // 第一个参数表示后续参数的数量 ``` ### 调试技巧 - 在Keil中,可以通过查看编译输出窗口的详细错误信息定位到具体的函数调用位置。 - 使用预处理后的文件查看宏展开后的实际代码:在Keil中选择`Options for Target → Listing`,勾选`Preprocessed Listing`,然后重新编译,查看生成的`.i`文件。 ### 总结 Keil错误#140的根本原因是函数调用时传递的参数数量超过了函数声明中的参数数量。通过检查函数声明、调用、宏定义以及使用可变参数函数(如果需要)可以解决此问题。 §§相关问题§§ 1. Keil编译错误#65: expected a ";" 如何解决? 2. 如何在Keil中使用可变参数函数? 3. Keil中如何查看预处理后的代码? 4. 函数声明和定义不一致会导致什么编译错误?</think>### Keil 编译错误 #140: "too many arguments in function call" 解决方案 该错误表示函数调用时传递的参数数量超过了函数声明中定义的参数数量。以下是系统化解决方案: #### 1. **检查函数声明与调用一致性**(核心问题) ```c // 错误示例:声明2个参数,调用3个参数 void init_gpio(GPIO_TypeDef* port, uint16_t pin); // 声明 init_gpio(GPIOA, GPIO_Pin_0, 1); // 错误调用(多出1个参数) ``` **解决方法:** - 修改声明匹配调用: ```c void init_gpio(GPIO_TypeDef* port, uint16_t pin, uint8_t mode); ``` - 或修改调用匹配声明: ```c init_gpio(GPIOA, GPIO_Pin_0); // 移除多余参数 ``` #### 2. **检查宏导致的参数变化** 引用[1]提到的宏定义问题: ```c #define LED_ON(port, pin, mode) led_control(port, pin, mode, 1) // 错误调用: LED_ON(GPIOA, GPIO_Pin_0, OUTPUT, 100); // 多出1个参数 ``` **解决方法:** - 检查宏定义: ```c #define LED_ON(port, pin, mode, duration) \ led_control(port, pin, mode, 1, duration) // 修正参数数量 ``` #### 3. **函数重载问题处理** Keil C不支持C++风格重载,以下代码会报错: ```c void set_pin(uint16_t pin); void set_pin(uint16_t pin, uint8_t mode); // 错误:重载不被支持 ``` **解决方法:** - 使用不同函数名: ```c void set_pin_simple(uint16_t pin); void set_pin_advanced(uint16_t pin, uint8_t mode); ``` #### 4. **参数类型不匹配的连锁错误** ```c void timer_init(TIM_TypeDef* tim, uint16_t prescaler); // 错误调用(浮点数导致参数被识别为两个): timer_init(TIM2, 72.0); // 错误#140 ``` **解决方法:** - 添加强制类型转换: ```c timer_init(TIM2, (uint16_t)72.0); ``` #### 5. **使用可变参数函数(高级方案)** 当需要灵活参数数量时: ```c #include <stdarg.h> void config_pins(int num, ...) { va_list args; va_start(args, num); for(int i=0; i<num; i++) { uint16_t pin = va_arg(args, uint16_t); // 配置引脚 } va_end(args); } // 正确调用: config_pins(3, LED_PIN1, LED_PIN2, LED_PIN3); // 第一个参数指定数量 ``` #### 调试技巧 1. **查看预处理结果**: - Keil设置:`Options for Target → Listing → C Preprocessor Listing` - 检查宏展开后的实际参数 2. **编译器诊断信息**: ```bash Build Output → 双击错误 → 定位到问题行 ``` 3. **函数原型检查**: ```c #ifdef __CHECK_PROTOTYPES #pragma CHECK_PROTOTYPES ON // 开启严格原型检查 #endif ``` > **根本原因**:C语言要求函数调用必须严格匹配声明[^1]。通过参数一致性检查、宏修正和类型转换可解决。 --- ### 相关问题 1. Keil错误#65: "expected a &#39;;&#39;" 如何解决? 2. 如何在Keil中正确使用可变参数函数(varargs)? 3. Keil编译错误#20: "identifier not found" 的原因是什么? 4. 如何查看Keil编译器的宏展开结果? 5. C语言中函数指针的参数数量不匹配会导致什么问题?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值