我试图在 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/