黑马程序员技术交流社区
标题:
宏定义中的变量定义问题?
[打印本页]
作者:
远人
时间:
2014-3-31 11:30
标题:
宏定义中的变量定义问题?
这是关于c语言宏定义的的一段简单代码,今天我默写,发现了一个问题,不明白,代码如下
#include <stdio.h>
#define sum(v1 , v2) ((v1) + (v2))
int main(int argc, const char * argv[])
{
// int sum(int v1 ,int v2);
int a = sum(4 ,5) * sum(3, 2);
printf("a的值是%d\n",a);
return 0;
}
复制代码
如代码所示,在编写程序前,使用一个变量都需要先定义,代码中我唯一注释的一行 // int sum(int v1 ,int v2); 就是我自己写的定义,但是加入到代码中之后总是报错,报错原因也是莫名其妙,不要这行代码注释掉之后代码正确,这是为什么?
作者:
周宇华
时间:
2014-3-31 11:36
函数名和宏定义名重复冲突了。预编译会把函数也给替换了就会导致莫名其妙的错误。
作者:
agelessman
时间:
2014-3-31 12:08
#define sum(v1 , v2) ((v1) + (v2)),就是一个宏定义,就等于有了一个真身和替身
你下边又弄了一个 int sum(int v1 ,int v2);不就是自相矛盾了吗
作者:
Hi围城
时间:
2014-3-31 13:06
本帖最后由 Hi围城 于 2014-3-31 13:42 编辑
#include <stdio.h>
#define sum(v1 , v2) ((v1) + (v2))
int main(int argc, const char * argv[])
{
// int sum(int v1 ,int v2);
/* int ((int v1) + (int v2)); */ // 你定义的宏的处理效果,此处编译不能通过。
int a = sum(4 ,5) * sum(3, 2);
/* int = ((4) + (5)) * ((3) + (2)); */ // 你定义的宏的处理效果
printf("a的值是%d\n",a);
return 0;
}
// 预处理指令宏定义执行之后,第8行其实变成了一个被错误取名的变量,变量是标识符的一种,由英文字母大小写,0~9的阿拉伯数字和_下划线组成,且不能以数字开头。
复制代码
作者:
远人
时间:
2014-3-31 16:51
Hi围城 发表于 2014-3-31 13:06
恩,这个解释有道理!
作者:
2014571245
时间:
2014-4-1 23:34
对啊 ,怎么能重名呢,C语言是严格区分大小写的,更别说重命名了!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2