C语言中的宏替换详解
首先看一个问题:
#include
#define PRINT_CLINE() printf("%d", ______)
int main(void)
{
PRINT_CLINE();
PRINT_CLINE();
return 0;
}
在横线处填上适当的代码,使得上面这段代码的输出为34。
...
分类:
编程语言 时间:
2014-09-20 23:23:49
阅读次数:
830
在程序编译之前,由预处理程序进行预处理(宏替换、条件编译)的过程预处理程序: 宏定义 1)无参宏定义 宏定义一般放在文件开始处 使用关键字:define , 宏定义的格式:#define 宏名 宏值 //表示,在程序中一旦出现宏名的地方,都用宏...
分类:
其他好文 时间:
2014-09-20 18:29:19
阅读次数:
176
const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进行字符串的替换,容易出现边际问题,造成错误。但是const的用法并不仅仅在此,因此整理一下,加深理解
分类:
编程语言 时间:
2014-08-13 17:53:56
阅读次数:
162
’比如“好”,有了“好”就没必要再造个“坏”,用“不好”就可以了。‘--初看似乎比较搞笑,可恍惚中感觉在工程历史上好象也有人使用这种哲学的。。。。譬如,C指针的定义,还有那个不得已宏替换的define和指定类型别名的typedef等等,--事情中人们都有不自觉运用这种哲学的尴尬时候呢。
分类:
其他好文 时间:
2014-07-23 20:47:05
阅读次数:
174
1.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理。such as:inline int add(int a,int b,int c){ r....
分类:
编程语言 时间:
2014-07-18 10:28:53
阅读次数:
268
类型取别名,还可以定义常量、变量、编译开关都知道两个在某些情况下是相同的 但是define是在预编译时就会处理掉,进行简单的宏替换,不管正不正确都替换掉,末尾没有分号,有分号连分号也一起替换了。 而typedef则是在已经定义的类型中进行别名的定义。 typedef有作用域,define只要是在.....
分类:
其他好文 时间:
2014-07-16 20:52:29
阅读次数:
193
建议和规则建议:用内联函数或静态函数代替与函数相似的宏在宏参数名两边加上括号宏替换列表应该加上括号应该使用typedef定义编码类型不要复用标准头文件名理解连接标记或执行字符串化时的宏替换把头文件放在包含防护条件中避免使用连续的问号保证头文件名唯一不要用不安全的函数替换安全函数在一个do-while...
分类:
其他好文 时间:
2014-07-03 11:38:46
阅读次数:
258
1、C语言的执行过程包括5个步骤:分别是:预处理,编译,汇编,链接,执行
第一步:编写C源代码,截图如下:
2、预处理,命令为:gcc -E variable.c -o variable.i(这步的作用是文件的展开和宏替换),生成的文件类型是.i类型的。
3、编译:命令为:gcc -S variable.i -o variable.s,这里的.s文件就成了会变语言,截图如下:
4、...
分类:
编程语言 时间:
2014-06-30 18:23:41
阅读次数:
269
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb;//这多数不符合我们的意图,它只声明了一个指向字符变量的指针,//和一个字符变量;以下则可行:typedef char* PCHAR;PCHAR pa, pb;这种用法很有用,特别是c...
分类:
其他好文 时间:
2014-06-18 10:37:47
阅读次数:
211