C语言一个简单的宏定义问题?

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:06:32
代码如下:
#include<stdio.h>
#define abc(nihao) printf("nihao")
void mian()
{
abc(hello);
}

以上为代码,但是运行后输出的是“nihao”,为什么不是“hello”呢?
高手给解释一下,谢谢!

#include<stdio.h>
#define abc(nihao) printf(#nihao)

int main(){
abc(hello);
}

***********************************************************************
#把宏参数变为一个字符串,##把两个宏参数贴合在一起.
这是一个很好的#的例子。
#define _T(x) L##x 是《Windows核心编程》中对Unicode字符串的例子。源自 short int k[] = L"这是个Unicode字符串"; 现在不支持short int 了,但是可以wchar_t。
***********************************************************************
我和sgedev站在一起。你可以把我的程序编译去看。 #nihao是可以的。

#include<stdio.h>
#define abc(nihao) printf(nihao)
void main()
{
abc("hello");
}

你要想实现这个功能, 可以这样定义宏:
#define abc(nihao) printf(#nihao)

因为你把nihao放在“”中了,不管写什么都会print “nihao”
你把“”去掉或者把前面abc中加上“”

根本不能运行。。。 宏定义是 预编译 代码 替换而已。。

abc(hello) 不符合 abc(nihao) 的替换。。。根本不行。。。

怎么会输出nihao呢?根本不能运行,同意二楼,