最后一行s[++i],不应该是s【1】吗,应该输出B,为什么会输出D呢
#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))
void main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
putchar(TOUPPER(s[++i]));
}
最后一行s[++i],不应该是s【1】吗,应该输出B,为什么会输出D呢
#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))
void main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
putchar(TOUPPER(s[++i]));
}
收起
这个道理很简单,因为宏只是机械的文本替换,每次遇到c都会替换成s[++i]
而你的表达式出现了好几次c,所以最后相当于
putchar(('a'<=(s[++i])&&(s[++i])<='z'?(s[++i])-'a'+'A':(s[++i])));
#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))
int main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
char ch = s[++i];
putchar(TOUPPER(ch));
}
这样就是b
报告相同问题?