C语言中怎样实现打印宏?(例如#define BBBBBBB 100000,然后输入为100000的时候打印出BBBBBB。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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值实现关联,实现一个最简单散列关系。。
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语言中的宏定义
1. C 语言中的宏定义
(1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不
(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)
(3)#define 定义之后的代码都可以使用这个宏
2. 定义宏常量
(1)#define 定义的宏常量可以直接使用
(2)#define 定义的宏常量本质为字面量
3. 宏定义表达式
(1)#define 表达式的使用类似函数调用
(2)#define 表达式可以比函数更强大
(3)#define 表达式比函数更容易出错
#include <stdio.h> #define _SUM_(a, b) (a) + (b) #define _MIN_(a, b) ((a) < (b) ? (a) : (b)) #define _DIM_(a) sizeof(a)/sizeof(*a) int main() { int a = 1; int b = 2; int c[4] = {0}; int s1 = _SUM_(a, b); //(a)+(b) int s2 = _SUM_(a, b) * _SUM_(a, b); //(a)+(b)*(a)+(b) int m = _MIN_(a++, b); //((a++)<(b)?(a++):(b)) int d = _DIM_(c); //sizeof(c)/sizeof(*c); printf("s1 = %d\n", s1); // 3 printf("s2 = %d\n", s2); // 5 printf("m = %d\n", m); // 2 printf("d = %d\n", d); // 4 return 0; }
4. 宏表达式与函数的对比
(1)宏表达式被预处理器处理,编译器不知道宏表达式的存在
(2)宏表达式用“实参”完全替代形参,不进行任何运算。
(3)宏表达式没有任何的“调用”开销
(4)宏表达式中不能出现递归定义。
内置宏
#include <stdio.h> #include <malloc.h> #define MALLOC(type, x) (type*)malloc(sizeof(type)*x) #define FREE(p) (free(p), p=NULL) #define LOG(s) printf("[%s] {%s:%d} %s \n", __DATE__, __FILE__,__LINE__, s) #define FOREACH(i, m) for(i=0; i<m; i++) #define BEGIN { #define END } int main() { int x = 0; int* p = MALLOC(int, 5); //以 int 类型作为参数! LOG("Begin to run main code...");FOREACH(x, 5) BEGIN p[x] = x; END FOREACH(x, 5) BEGIN printf("%d\n", p[x]); END FREE(p); LOG("End"); return 0; }
以上是关于C语言中怎样实现打印宏?(例如#define BBBBBBB 100000,然后输入为100000的时候打印出BBBBBB。的主要内容,如果未能解决你的问题,请参考以下文章