社区
C语言
帖子详情
编译预处理的问题~~~~~~~急
neight
2003-10-11 08:50:47
#pragma有什么参数?是用来干什么的啊?
#if和#ifdef
为什么有些人的开头会写 “#define ABC” 之类的?define不是宏定义吗?这样只定义宏名却没给宏值,有意义的吗?~
另外请说一下static和const的用处?
...全文
87
8
打赏
收藏
编译预处理的问题~~~~~~~急
#pragma有什么参数?是用来干什么的啊? #if和#ifdef 为什么有些人的开头会写 “#define ABC” 之类的?define不是宏定义吗?这样只定义宏名却没给宏值,有意义的吗?~ 另外请说一下static和const的用处?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Andy84920
2003-10-11
打赏
举报
回复
static是指"静态的"的意思.
const是指"不可改变"的意思.
看你这两个修饰词被用在程序的什么域中来讨论这个问题.
用const修饰的量不能被修改.但有一种情况例外就是C++中的multable修饰的量. :)不知道
有没有拼错.
static比如被用在一个函数中的定义变量中,在调用此函数时只有第一次编译时进行赋值
操作.后面的调用不会进行赋值,而只会用上一次使用此变量过后存在的值.
sevencat
2003-10-11
打赏
举报
回复
请帮我顶一下
http://expert.csdn.net/Expert/topic/2333/2333459.xml?temp=.4866144
谢谢先。
fangjinhuo
2003-10-11
打赏
举报
回复
另外请说一下static和const的用处,在许多书里都有描述,如 <<C++程序设计语言(特别版) >>
direstrait
2003-10-11
打赏
举报
回复
#pragma是用来指示机器或OS的特性的。
#define ABC之类的东东一般都是用来做标志,后面用来条件编译的。
比如在头文件里面名为
TEST.H
可以加上
ifndef _TEST_H
define _TEST_H
endif
至于为什么名字写成那样,一为了让人容易看明白,二是为了防止定义重名
static跟CONST
去找找帖子吧,这种帖子多的是,STATIC是静态变量,就是在函数里有些象全局变量,函数结束后内存不会被注销,因为它不是在栈上分配的。
CONST是常量,即定义了以后不能再对它的值修改了。
ipgk
2003-10-11
打赏
举报
回复
“#define ABC”之类的
--------------------------------
是为了#if和#ifdef配合使用啊
另外请说一下static和const的用处?
-------------------------------
还是自已看看书吧。
fangjinhuo
2003-10-11
打赏
举报
回复
http://www.pcvc.net/category/content.asp?sendid=248
ipgk
2003-10-11
打赏
举报
回复
文章名:解析#pragma指令
出 处:互联网
作 者:hustli
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。
其格式一般为: #Pragma Para
其中Para 为参数,下面来看一些常用的参数。
(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗
口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
#Pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_
X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了
。
(2)另一个使用得比较多的pragma参数是code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。
(3)#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。
(4)#pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。
有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。
(5)#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体
外观的定义。
(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
同时这个pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
这里n代表一个警告等级(1---4)。
#pragma warning( push )保存所有警告信息的现有的警告状态。
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告
等级设定为n。
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的
一切改动取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。
(7)pragma comment(...)
该指令将一个注释记录放入一个对象文件或可执行文件中。
常用的lib关键字,可以帮我们连入一个库文件。
sevencat
2003-10-11
打赏
举报
回复
#pragma comment(lib,"libscsock.lib")
#pragma disable..
#pragma push..
#pragma once
#pragma pop
一个头文件的开头写那个是防止头文件被多次包含的。
static 全局的。
const不变的
C++中还可以大量使用ENUM,这个比CONST好点。
C
编译
器dev_3797.zip
C
编译
器,基于GCC的
编译
功能,比较好用哦,感觉不错,特分享给大家哦特分享给大家哦特分享给大家哦特分享给大家哦特分享给大家哦
玩转C语言——文件操作、
预处理
、
编译
、链接
define reg register //为 register这个关键字,创建⼀个简短的名字;) //⽤更形象的符号来替换⼀种实现case //在写case语句的时候⾃动把 break写上。// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。到这里我们对于#define的讲解就结束了。想必此时有人觉得这句话有点
问题
,怎么讲?明明目录还有,你却告诉我结束了,这莫过于你在看视频的时候,你才看一半,告诉你结束了,这不纯纯恶心人吗?
预处理
,
编译
,汇编,链接,全过程。
预处理
,
编译
,汇编,链接,全过程。
重新理解Linux交叉
编译
及
编译
流程
文章目录一、背景二、gcc和arm-linux-gcc的常用选项二、交叉
编译
的四个流程及实例说明1、
预处理
(preprocessing)2、
编译
(compilation)3、汇编(assembly)4、链接(linking) 参考书籍 1、
编译
原理 2、嵌入式Linux应用开发 一、背景
编译
性程序源文件需要经过
编译
才能生成可执行文件,比如一个C/C++文件要经过
预处理
(preprocessing)、
编译
(compilation)、汇编(assembly)和链接(linking)等4步才能变成可执行文件。
C语言中的预
编译
是什么?何时需要预
编译
?
C语言中的预
编译
是
编译
前的
预处理
阶段,主要包括宏定义替换(#define)、文件包含(#include)和条件
编译
(#ifdef等)三大功能。预
编译
通过文本替换和条件控制,提高代码灵活性、可读性和维护性。它适用于包含大型稳定代码、多模块程序以及需要优化
编译
效率的场景。合理使用预
编译
指令能显著提升开发效率,尤其在大型项目中可减少重复
编译
,增强代码兼容性。
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章