[英]Understanding macro functions in C that define variables [closed]
根据我的理解,预处理器指令用于在编译之前修改源代码。 我正在编写一些作业代码,但我的宏导致错误。 在我的作业中,我必须使用 main() 编写几个具有相同变量的文件。 我想使用这样的宏。
#define SETUP (i)\
char* memory = (char*) malloc(sizeof(char)*(i));\
char* memory2 = (char*) malloc(sizeof(char)*(i))
#define CLOSE ()\
free(memory);\
free(memory2)
int main () {
int i = 7;
SETUP(i);
/****************************/
Do stuff with memory and memory2
/*****************************/
CLOSE();
}
这样我就可以更改每个文件的 main() 的开头和结尾,而不必更改每个文件。 有人可以告诉我我不明白的地方吗?
在宏定义中,您在宏名称和左括号之间添加了一个空格:
#define SETUP (args_needed)\
这定义了一个普通的宏,而不是一个带参数的宏。 因此args_needed
不是宏参数并且未定义。
删除宏名称和左括号之间的空格:
#define SETUP(args_needed)\
调用宏时插入空格就可以了:
SETUP (10);
但这被许多人认为是糟糕的编码风格。
你没有在任何地方声明i
。 SETUP(i);
只是将i
传递给宏参数i
,因此宏扩展到的代码包含未声明的i
。 你可能想要像SETUP(10);
这样的东西SETUP(10);
反而。
还有这里
(char*) memory
不是你如何声明一个变量。 这是一个类型转换,它失败了,因为memory
未定义。 去掉括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.