主题:[讨论]最“二?”C语言宏问题
[code=c]
#include<stdio.h>
#include<conio.h>
#include<string.h>
/***********************************************************
返回最长字符串
***********************************************************/
#if 1
#define MAX_LEN(a, b) ((sizeof(a) >= sizeof(b)) ? (a):(b))
#else
char *MAX_LEN(char *a, char *b)
{
return (((strlen(a) >= strlen(b)) ? (a):(b)));
}
#endif
int main (void)
{
printf(" sizeof(\"VC\")-> %d\r\n\
sizeof(\"Java\")-> %d\r\n\
sizeof(\"C++\")-> %d\r\n\
sizeof(\"JavaScript\")-> %d\r\n",
sizeof("VC"),
sizeof("Java"),
sizeof("C++"),
sizeof("JavaScript"));
printf(" %s\r\n", MAX_LEN("VC", "Java"));
printf(" %s\r\n", MAX_LEN(MAX_LEN("VC", "Java"), "C++"));
printf(" %s\r\n", MAX_LEN(MAX_LEN(MAX_LEN("VC", "Java"), "C++"), "JavaScript"));
printf(" %s\r\n", MAX_LEN(MAX_LEN("3jia1", "jxust"), "www.jxust3jia1.com"));
printf(" %s\r\n", MAX_LEN(MAX_LEN(MAX_LEN("3jia1", "jxust"), "www.jxust3jia1.com"), "JavaScript"));
_getch();
return 0;
}
[/code]
运行结果为:
sizeof("VC")-> 3
sizeof("Java")-> 5
sizeof("C++")-> 4
sizeof("JavaScript")-> 11
Java
Java
JavaScript
www.jxust3jia1.com
JavaScript ->这个的结果不是应该为www.jxust3jia1.com吗?
如果切换成函数(即把上面代码中的#if 1 改成#if 0),最后显示的字符串就是www.jxust3jia1.com,但使用函数效率低,占用CPU运行时间。而使用宏则是由编译器来完成上面的运行,不用每次运行程序时都需要计算,大大提高了效率,可却出现了上面的问题了?????
请高手帮忙解释一下上述的宏情况,谢谢!
#include<stdio.h>
#include<conio.h>
#include<string.h>
/***********************************************************
返回最长字符串
***********************************************************/
#if 1
#define MAX_LEN(a, b) ((sizeof(a) >= sizeof(b)) ? (a):(b))
#else
char *MAX_LEN(char *a, char *b)
{
return (((strlen(a) >= strlen(b)) ? (a):(b)));
}
#endif
int main (void)
{
printf(" sizeof(\"VC\")-> %d\r\n\
sizeof(\"Java\")-> %d\r\n\
sizeof(\"C++\")-> %d\r\n\
sizeof(\"JavaScript\")-> %d\r\n",
sizeof("VC"),
sizeof("Java"),
sizeof("C++"),
sizeof("JavaScript"));
printf(" %s\r\n", MAX_LEN("VC", "Java"));
printf(" %s\r\n", MAX_LEN(MAX_LEN("VC", "Java"), "C++"));
printf(" %s\r\n", MAX_LEN(MAX_LEN(MAX_LEN("VC", "Java"), "C++"), "JavaScript"));
printf(" %s\r\n", MAX_LEN(MAX_LEN("3jia1", "jxust"), "www.jxust3jia1.com"));
printf(" %s\r\n", MAX_LEN(MAX_LEN(MAX_LEN("3jia1", "jxust"), "www.jxust3jia1.com"), "JavaScript"));
_getch();
return 0;
}
[/code]
运行结果为:
sizeof("VC")-> 3
sizeof("Java")-> 5
sizeof("C++")-> 4
sizeof("JavaScript")-> 11
Java
Java
JavaScript
www.jxust3jia1.com
JavaScript ->这个的结果不是应该为www.jxust3jia1.com吗?
如果切换成函数(即把上面代码中的#if 1 改成#if 0),最后显示的字符串就是www.jxust3jia1.com,但使用函数效率低,占用CPU运行时间。而使用宏则是由编译器来完成上面的运行,不用每次运行程序时都需要计算,大大提高了效率,可却出现了上面的问题了?????
请高手帮忙解释一下上述的宏情况,谢谢!