c语言中怎么用命令提示窗口编译宏定义并打印出来!请指教.谢谢了.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中怎么用命令提示窗口编译宏定义并打印出来!请指教.谢谢了.相关的知识,希望对你有一定的参考价值。

我想用cmd命令窗口,解开宏定义该怎么做? 系统:win7 64bit 环境:Microsoft Visual Studio 2010. 自己也试过一次,打开命令窗口: cd C:\Program Files (x86)\Microsoft Visual Studio 10.0[成功] C:\Program Files (x86)\Microsoft Visual Studio 10.0>cpp [空格,接下行]C:\Users\Gozs\Documents\Visual Studio 2010\Projects\PG.82.1题\1题.c'cpp'不是内部或外部命令,也不是可运行的程序,或批处理命令 求高手指教!

参考技术A 建议楼主安装 带mingw 的 devcpp 、codelite 或 c-free 或codeblock

gcc 命令比较简单 (把gcc.exe 的路径加到环境变量path里
path 设置方法
(winxp环境)我的电脑图标 右键 属性 高级 环境变量
系统环境 变量 path 选中 点编辑 添加 路径 路径之间用英文分号隔开


先用 cd 命令 进入 xxx.c 所在文件夹

gcc -E xxx.c 就可以看 预处理的效果了

用vc 2010 没用过
介绍vc6 中的方法
vc6 的C:\Program Files\Microsoft Visual Studio\VC98\Bin目录中有个
VCVARS32.BAT
的批处理用来在cmd下设置vc命令行编译需要的路径信息
cmd下运行此批处理后
就可以在该cmd窗口
使用vc的编译器cl.exe来编译、预处理........程序

CL.exe的全部命令开关
http://www.cppblog.com/sunraiing9/archive/2007/11/26/37323.html

cl /E xxx源文件绝对路径

温馨提示 凡是 路径 中有中文 或带空格的请加上 引号
路径太长输入麻烦的的
建议 直接把c/cpp文件 拖到cmd窗口 ,这样系统会帮你自动给出文件路径追问

系统:win7 64bit.
不支持vc 6.0,你给的命令要怎么使用?
>C:\Program Files (x86)\Microsoft Visual Studio 10.0 >/e .................
这样么?还有 应该把哪个后缀文件拖入命令窗口

参考技术B 安装 Visual Studio 后在开始菜单里找 Microsoft Visual C++ 命令提示符,打开后,用微软的编译器 cl 编译,不是 cpp。追问

Microsoft Visual C++ 命令提示符 在哪个文件夹有?
>cd C:\Program Files (x86)\Microsoft Visual Studio 10.0
>C:\Program Files (x86)\Microsoft Visual Studio 10.0 >cl "C:\Users\Gozs\Documents\Visual Studio 2010\Projects\PG.82.1题"
'cl'不是内部或外部命令,也不是可运行程序或批处理命令.
>C:\Program Files (x86)\Microsoft Visual Studio 10.0 >

怎么回事?

追答

我的是 Visual Studio 2008,方法如下。2010 也类似。
开始菜单 - 程序 - Microsoft Visual Studio 2008 - Visual Studio Tools - Visual Studio 2008 命令行,打开后,环境变量以及头文件、库文件路径均已设置好。可直接用 cl 来编译,如 cl c:\test.c。但是需要注意的是,编译出来的文件放在命令行的工作目录,而非 test.c 所在目录 C 盘。如果你要编译到 C 盘,需要先输入 C:,如果本来就是 C 盘,不是根目录,还需要输入 cd \ 切换到根目录。此时用 cl test.c 即可在同文件夹内看到 test.obj 和 test.exe。楼上说的拖路径,指输完 cl 之后按空格,然后将 c 或 cpp 源文件直接拖放到 cmd 窗口上,路径就写自动上去了,不用手输。

追问

'cl'不是内部或外部命令,也不是可运行程序或批处理命令.为什么还是这样的提示?还有我只想查看宏扩展的情况,不需要存盘的.

请你给个插图好么?谢谢

 

追答

我都说了两次是通过开始菜单打开 Visual Studio 20XX 命令行才能用 cl,你非要在普通命令行里用 cl,肯定不能保证可用。如果你只是看宏展开,不编译,确实要用 cpp,但是 VC 不支持这个。我现在用 MinGW,内置 gcc、make 还有 msys 仿 Linux 终端程序,还能编译 Windows 程序。通过这个可以调用 cpp 来查看宏展开后的源码。

本回答被提问者采纳

C语言中怎样实现打印宏?(例如#define BBBBBBB 100000,然后输入为100000的时候打印出BBBBBB。

就是实现格式化输出MyPrintf()函数。

编译型语言c是不能打印“预编译宏”的,
代码在编译前的预编译步骤时,所有的宏都已经被数据代替。BBBBBB都被换成100000,
再编译时已经看不到宏。编译后更只剩机器指令和数据。

对于重复的常量,现代编译器通常会优化,自动归为一个数据。不需要从常量找宏
现代的IDE也会列出项目中可用的宏。找宏也简单。追问

难道真的没有一点办法去实现了?我就是想实现格式化打印,例如下面MyPrintf()函数一样。

追答

你为什么要把格式化和宏联系上?你口中的“格式化”是指什么?举个例子。

追问

就是我想设计这样一种函数void MyPrintf(char*,int);它包含两个参数,第一个是字符串参数,第二个是整形参数。字符串参数就是要输出“宏名”,整形参数是为了控制那个要输出的“宏名”。例如,#define TestInt 10000;MyPrintf("%s\n",10000)的输出结果就是TestInt。谢谢你耐心的回答。

追答

这么做属于误用了-拿高层的操控想法在写低层的C代码。等于要对编译型语言做其他高级语言才有的反射操作-想要“控制语法成分”本身。编译语言在编译后,所有的C语言的语法结构已经不存在(没有if 没有int 没有define),执行档在运行时runtime已经不具有宏信息。
你可以做的,学数据结构,建立10000和testint的对应关系。比如构建散列表,红黑树表,建立字典关系,可以简单查找。
或者,建立最简单的2个数组int k[]; char *v[];
k[0]=10000; v[0]="testint";
k[i]=222; v[i]="hello"
通过i值实现关联,实现一个最简单散列关系。。

参考技术A 用#ifdef ,然后再判断你输入的数,如果相等就打印。
Myprintf(char *test,long n)
#ifdef TESTINT
if(10000 == n)
printf("%s",test);
#endif
参考技术B 可以用一个数组存放定义的宏,这样,从数组中搜索到“100000”后,再根据索引搜索"BBBBBBB" 参考技术C 不能这样用。#define 的作用说白了就是替换。只有在你的代码中出现100000 才会自动替换为BBBBBBB 。 但是如果你的100000是存在变量里面,那么是不起任何作用的。因为它不能追着变量去替换。 参考技术D 没看明白。。。。。。

以上是关于c语言中怎么用命令提示窗口编译宏定义并打印出来!请指教.谢谢了.的主要内容,如果未能解决你的问题,请参考以下文章

c语言 define 怎么用的

在C语言中 宏定义是啥?

C语言宏定义

单片机c语言宏定义有几种

C语言中的宏定义怎么用?

C语言中怎样修改宏定义呢