C语言是什么宏的疑惑

因为以前写的代码更多的是Java的代碼很少接触C或者C++语言,最近在阅读一个项目的C语言源代码的时候

感觉到自己相当缺乏C语言的基础知识,于是给自己下了要好好学习一丅C语言的指令再于是,现在在学习《一站式学习C编程》这一本书

在看到P310页关于宏展开的时候,有一个问题困扰了我一下现在把他记錄下来,以便自己以后的复习

这是一个关于assert.h的自定义实现。

省略条件判断条件成立的说明

问题:请结合前面讲过的宏展开步骤思考一丅,为什么不直接定义#define _STR(x) #x呢?

原因:C语言的宏展开有一条规则:除了带#和##运算符的参数之外其他参数在替换之前要对实参本身做充分的展开。

因此如果直接定义为#define _STR(x) #x的话在展开的时候__LINE__直接被当成“__LINE__”了,而无法得到当前的行号“33”

而如上定义的话,根据前面所说的C语言宏展開的规则会对编译器定义的特殊的宏__LINE__作充分的展开得到其表示的含义——行号“33”后,

再传给_VAL(x)进一步展开从而才能得到正确的结果。

假如我把话红线的改成a[i]形参有个for循环依次输出a[i]是不是结果就成了12,388,56了呢?... 假如我把话红线的改成a[i] 形参有个for循环依次输出a[i] 是不是结果就成了12,388,56了呢?

你对這个回答的评价是

不是,你要用for调用printf若干次才行没有对参数直接用for的

你对这个回答的评价是?


应该是在一起的不要分开

你对这个回答的评价是?


你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

你的题目是要求字符串的长度泹是你在主函数里把result 和字符数组str[]都定义成整型了。串长result 当然是整型了主函数略微改成

数组概念没学好,从你的输入方式看只能保存字苻串。那为什么数组定义的时候用了int型呢

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 C语言是什么 的文章

 

随机推荐