1,用预处理指令difine声明1个常数用以表明1年中有多少秒

#difineof365and31536000

用预处理指令difine声明1个常数用以表明1年中有多少秒

2,各位大侠这个怎么做求教了C语言定义一个符号常量记录一年中

#define Hours_Ayear (365*24)main()scanf("%f",&h);printf("%.3f year(s)\n",h/Hours_Ayear);}

各位大侠这个怎么做求教了C语言定义一个符号常量记录一年中

3,用预处理指令define 声明一个常数用以表明1年中有多少秒

#define YEAR_SECONDE(y) (y%400==0 || y%4==0 && y%100!=0) ? 31622400L : 31536000L
#define PRE_YEAR_SCEOND 1L*365*24*3600
define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 懂得预处理器将为计算常数表达式的值,因此,直接写出是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号l,告诉编译器这个常数是的长整型数。 如果在表达式中用到ul(表示无符号长整型),那么有了一个好的起点。记住,第一印象很重要。

用预处理指令define 声明一个常数用以表明1年中有多少秒

4,简述宏和常量的关系

牵扯到C的编译过程,简单的讲(不一定精确)C程序的编译过程包括以下步骤:预处理:展开头文件,替换宏翻译: 将C代码翻译成为汇编代码编译: 将汇编转换为机器代码链接: 将编译成的机器代码与相关库二进制文件打包成可执行程序宏在第一步就被替换,也就是说在生成的可执行程序中,是找不到宏的。常量首先是C代码中的变量,只是编译器处理过程中约束它不能被修改,比如 const int a = 5 它是一个实际被分配内存位置和指针的量。从机器角度它与普通变量没有区别,只是编译器保证代码不会对它进行修改。比如下面的程序:#define MAX (100)const int a = 5;int func() int b = a + 1; int c = MAX / 2; return b + c;}我们用 gcc -E 进行第一步预处理,得到:const int a = 5;int func() int b = a + 1; int c = (100) / 2; return b + c;}可以看到宏仅仅是进行了文字上的替换。在实际使用中宏和常量都可以用来表示一些不允许被改变的量。但有以下区别:1. 宏只是进行文本上的替换,所以编译器无法对宏的正确性进行检查。在多数情况下应该用常量而不是宏表示不允许被改变的量。2. 常量被编译到.rdata(gcc),而宏则属于程序内容,可能被写到 .text 或 .rdata 段中3. 宏提供了一种语法替换的功能,可以作一些改变程序语法的操作,但也为程序维护增加了难度。
define宏定义和const常变量区别:1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。2.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。const定义的常量,在编译时进行严格的类型检验,可以避免出错。3.define定义表达式时要注意“边缘效应”,const定义的表达式则没有上述问题。const定义的常量叫做常变量原因有二:const定义常量像变量一样检查类型;const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同。

5,宏定义的参数

宏定义又称为宏代换、宏替换,简称“宏”。格式:#define 标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。掌握宏概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。即在对相关命令或语句的含义和功能作具体分析之前就要换:例:#define Pi 3.1415926把程序中出现的Pi全部换成3.1415926说明:(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。(4)宏定义末尾不加分号;(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。(6)可以用#undef命令终止宏定义的作用域(7)宏定义允许嵌套(8)字符串( )中永远不包含宏(9)宏定义不分配内存,变量定义分配内存。(10)宏定义不存在类型问题,它的参数也是无类型的。 除了一般的字符串替换,还要做参数代换格式:#define宏名(参数表) 字符串例如:#define S(a,b) a*barea=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;类似于函数调用,有一个哑实结合的过程:(1)实参如果是表达式容易出问题#define S(r) r*rarea=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;正确的宏定义是#define S(r) ((r)*(r))(2)宏名和参数的括号间不能有空格(3)宏替换只作替换,不做计算,不做表达式求解(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存(5)宏的哑实结合不存在类型,也没有类型转换。(6)宏展开使源程序变长,函数调用不会(7)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
这么跟你说吧: 你把k+j看成是大写X, S(k+j) = S(X) = X*X = 5+2*5+2 = 17 T(k+j)= S(X)*S(X) = X*X*X*X= 5+2*5+2*5+2*5+2 = 37 因为#define 是简单的替换,但是加减乘除是有顺序的,所以就容易出错了,如果你加了括号就会得到你想到的答案了,比如:#define S(x) (x)*(x) #define T(x) (S(x))*(S(x)) 他的答案就会是: S(k+j) = S(X) = X*X = (5+2)*(5+2) = 49 T(k+j)= S(X)*S(X) = X*X*X*X= (5+2)*(5+2)*(5+2)*(5+2) = 2401

文章TAG:定义定义宏常量表示每年有多少秒  用预处理指令difine声明1个常数用以表明1年中有多少秒  
下一篇