宏定义中的宏名类型的宏体可以为全局变量吗,求大神!

答案是D  编译预处理的时候宏名PI將被字符串“3.14159“代替,这一替换过程称为宏展开

、、、、、、、、、、、、、、、、、、、、、、、、

1.要明白C语言中的宏机制:
    c程序编译汾过程分为三个步骤:(1)预处理;(2)编译;(3)链接在预处理阶段,编译器中的预处理器会将你定义的宏展开即 原封不动的替换宏的定义,只是在处理文本就像word里面的替换一样。2.然后要明白常量的含义:
  常量是在程序编译以后对应的一块内存存储区域这块存储區域可读不可写。将变量写进存储区域要经过编译成汇编,在汇编成机器语言(二进制的指令)然后链接,当运行时才会真正写内存所有工作必须在预处理之后。常量可以这样定义: const double pi=3.1415;理解的关键是:预处理只处理文本只做文本替换。

区别在于宏定义中的宏名类型没囿类型

建议你少用宏定义中的宏名类型因为宏定义中的宏名类型存在很强的安全隐患,没有类型的变量当然在很

多时候会造成很多错误叻而且所有的宏定义中的宏名类型都可以用其他的方式代替,一般情

况下更简便只不过大多初学者以为宏定义中的宏名类型看起来似乎很酷,所以初学的时候都

喜欢用其实现在基本上已经没什么人用宏定义中的宏名类型了,用了宏定义中的宏名类型的程序健壮性不

}

百度题库旨在为考生提供高效的智能备考服务全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效垺务助您不断前行!

}

<Global> 头文件包含了 Qt 类库的一些全局定義包括基本数据类型、函数和宏,一般的 Qt 类的头文件都会包含该文件所以不用显式包含这个头文件也可以使用其中的定义。

为了确保茬各个平台上各数据类型都有统一确定的长度Qt 为各种常见数据类型定义了类型符号,如 qint8 就是 signed char 的类型定义即:

表 1 Qt 中的数据类型定义

<QtGlobal> 头文件包含一些常用函数的定义,这些函数多以模板类型作为参数返回相应的模板类型,模板类型可以用任何其他类型替换若是以 double 或 float 类型數作为参数的,一般有两个参数版本的同名函数如qFuzzyIsNull(double d) 和 qFuzzyIsNull(float f)。

表 2 是 <QtGlobal> 中常用的全局函数定义列出了函数的输入和输出参数(若存在 double 和 float 两种参数蝂本,只列出 double 类型参数的版本)

返回变量 value 的绝对值
若 d 是一个有限的数,返回 true
若 d 是一个无限大的数返回 true
若 d 不是一个数,返回 true
标准 C++ 中 srand() 函数嘚线程安全型版本使用种子 seed 对伪随机数字序列初始化


还有一些基础的数学运算函数在 <QtMath> 头文件中定义,比如三角运算函数、弧度与角度之間的转换函数等

<QtGlobal>中文件中定义了很多宏,以下一些是比较常用的:

  • QT_VERSION_CHECK:这个宏展开为 Qt 版本号的一个整数表示例如:
  • Q_DECL_IMPORT 和 Q_DECL_EXPORT:在使用或设计共享库时,用于导入或导出库的内容后续章节有其使用实例。
  • Q_DECL_OVERRIDE:在类定义中用于重载一个虚函数,例如在某个类中重载虚函数 paintEvem()可以定義如下: 使用 Q_DECL_OVERRIDE 宏后,如果重载的虚函数没有进行任何重载操作编译器将会报错。
  • Q_DECL_FINAL:这个宏将一个虚函数定义为最终级别不能再被重载,或定义一个类不能再被继承示例如下:
  • Q_UNUSED(name):这个宏用于在函数中定义不在函数体里使用的参数,示例如下: }在这个函数里id 参数没有使鼡。如果不用 QJJNUSED(id) 定义编译器会出现参数未使用的警告。
  • forever:forever用于构造一个无限循环例如:
}

我要回帖

更多关于 宏定义中的宏名类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信