C - 通过引用传递结构

标签 c struct pass-by-reference

我试图在 C 中通过引用传递一个结构,以便我可以在函数内修改值。这是我目前的代码,但它会产生一些警告和一个错误。

主.c

#include <stdio.h>
#include "myfunctions.h"
#include "structures.h"

int main(int argc, char const *argv[] {

    struct MyStruct data;

    data.value = 6;

    printf("Before change: %d\n", data.value);

    changeData(data);

    printf("After change: %d\n", data.value);

}

我的函数.c

#include "structures.h"

void changeData(MyStruct data) {
    data.value = 7;
}

我的函数.h

#ifndef MyStruct
#define MyStruct

void changeData(MyStruct data);

#endif

结构.h

typedef struct {

    int value;

} MyStruct;

产生的错误

In file included from main.c:2:0:
myfunctions.h:4:1: warning: parameter names (without types) in function declaration
 void changeData(MyStruct data);
 ^
In file included from main.c:3:0:
structures.h:5:1: warning: unnamed struct/union that defines no instances
 } MyStruct;
 ^
main.c: In function ‘main’:
main.c:9:5: error: ‘data’ undeclared (first use in this function)
     data.value = 6;
     ^
main.c:9:5: note: each undeclared identifier is reported only once for each function it appears in

最佳答案

都是因为

#define MyStruct

通过这一行,您将 MyStruct 定义为一个扩展为空的宏。 IE。您已经有效地删除了以下代码中所有出现的 MyStruct ,这就是为什么编译器对看到类似的东西如此困惑

typedef struct {

    int value;

} ;

void changeData( data);

要解决这个问题,请使用

#ifndef MYFUNCTIONS_H_
#define MYFUNCTIONS_H_

相反。 (这就是为什么我们为宏使用 ALL_UPPERCASE 名称的原因:为了避免意外名称与普通标识符发生冲突。)

关于C - 通过引用传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41884118/

相关文章:

c++ - 2个c源文件之间的函数指针操作导致编译时错误

c - 需要帮助使用 qsort 对 C 中的结构数组进行排序

c - Malloc 结构数组的数组

c - 在 C 中通过引用传递或使用全局变量

c - 动态数组在通过引用传递时交换列和行

c++ - shared_ptr 构造函数参数是否应该按值传递

c - 将 PTX 程序直接传递给 CUDA 驱动程序

c - 为什么模在此 C 代码中无法正常运行?

c - 链接器或加载器如何处理共享库的损坏软链接(soft link)?

c++ - "Extend"C++ 结构