gpt4 book ai didi

c - Sedona 中的原生 C 方法 - 间接级别

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:26 26 4
gpt4 key购买 nike

我正在使用一种名为 Sedona 的语言工作,它可以采用 native C 方法。为了在 sedona 中集成 C,变量声明有点偏离。

  1. 塞多纳 -> C
    • bool -> int32_t
    • bool [] -> uint8_t*
    • byte -> int32_t
    • byte[] -> uint8_t*
    • 短 -> int32_t
    • 短[] -> uint16_t*
    • int -> int32_t
    • int[] -> int32_t*
    • 长 -> int64_t
    • long[] -> int64_t*
    • float -> float
    • float [] -> float *
    • 双 -> 双
    • 双[] -> 双*
    • 对象 -> void*
    • 目标[] -> void**
    • Str -> uint8_t*
    • Str[] -> uint8_t**

我的方法是尝试打开一个文件,读取其内容并将文件的内容作为字符串返回给其他 Sedona 方法使用。我知道你们中的大多数人可能不了解塞多纳,但我遇到了一些我不明白的错误。这是我的代码:

#include <stdio.h>
#include "sedona.h"

Cell MyWeblet_MainWeblet_getFile(SedonaVM* vm, Cell* params){
uint8_t* file_name = params[1].aval;
FILE *fp;
uint8_t* fileContents;
struct stat st;
stat(&file_name, &st);
int32_t size = st.st_size;
int32_t itter = 0;
Cell result;

fileContents = malloc(sizeof(char)*size);
fp = fopen(file_name, "r"); //read mode

if (fp==NULL){
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}

unit8_t* ch;
while ((ch = fgetc(fp))!=EOF){
fileContents[itter] = ch;
itter++;

}
result.aval = fileContents;
fclose(fp);
return result;
}

我得到的错误比这更多,但这是弹出的示例:

- warning C4047:'function' : 'const char *' differs in levels of indirection from 'uint8_t **'
- warning C4024:'stat' : different types for formal and actual parameter 1
- error C2275: 'int32_t' : illegal use of this type as an expression

我真的只是想了解这些错误的含义,我不需要任何人为我修复代码(尽管建议会很好)。

最佳答案

间接级别的差异 当您将指针变量分配给非指针类型时,或者更一般地说,当指针变量中的间接(星号)数量不同时,就会发生这种情况。例如,在以下(取消)引用情况下会出现此错误。

int *x, y;
x = y; // correct use: x = &y;
y = x; // correct use: y = *x;

特别是,您收到的错误表明形式参数和实际参数不匹配。当您从调用者传递给被调用者的参数值涉及间接级别的差异时,会在函数调用期间发生这种情况。示例如下。

void swap(int* x, int *y) { ... }
int x = 2; y = 3;
swap(x, y); // correct use: swap(&x, &y);

不幸的是,C 不是一种强类型语言,因此对于这些类型的错误只会抛出警告。然而,C++ 将这些报告为错误。

关于c - Sedona 中的原生 C 方法 - 间接级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com