黑马程序员技术交流社区

标题: 宏定义中的变量定义问题? [打印本页]

作者: 远人    时间: 2014-3-31 11:30
标题: 宏定义中的变量定义问题?
这是关于c语言宏定义的的一段简单代码,今天我默写,发现了一个问题,不明白,代码如下
  1. #include <stdio.h>

  2. #define sum(v1 , v2)  ((v1) + (v2))
  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6. //    int sum(int v1 ,int v2);
  7.    
  8.     int a = sum(4 ,5) * sum(3, 2);
  9.    
  10.     printf("a的值是%d\n",a);
  11.    
  12.     return 0;
  13. }
复制代码


如代码所示,在编写程序前,使用一个变量都需要先定义,代码中我唯一注释的一行 //    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 编辑
  1. #include <stdio.h>

  2. #define sum(v1 , v2)  ((v1) + (v2))
  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6.     //    int sum(int v1 ,int v2);
  7.     /* int ((int v1) + (int v2)); */ // 你定义的宏的处理效果,此处编译不能通过。
  8.    
  9.     int a = sum(4 ,5) * sum(3, 2);
  10.     /* int = ((4) + (5)) * ((3) + (2)); */ // 你定义的宏的处理效果
  11.    
  12.     printf("a的值是%d\n",a);
  13.    
  14.     return 0;
  15. }

  16. // 预处理指令宏定义执行之后,第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