我用的是一种叫做Sedona的语言,它可以采用原生C方法。为了在sedona中集成C,变量声明有点不对劲。
塞多纳->C
布尔->国际32区
布尔[]->单位8*
字节->int32
字节[]->uint8*
短->国际32
短[]->uint16*
整数->整数32
int[]->int32区*
长->int64_t
长[]->int64*
浮动->浮动
浮动[]->浮动*
双->双
双[]->双*
目标->无效*
对象[]->无效**
Str->单元8*
Str[]->单元8**
我的方法试图打开一个文件,读取其内容,并将文件内容作为字符串返回给其他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++将这些错误报告为错误。

09-26 18:07