当前位置:首页 » 编程软件 » C语言预编译的例子

C语言预编译的例子

发布时间: 2025-04-07 07:12:27

㈠ 初学c语言时,输入程序后运行,是执行还是预编译预编译是什么为什么最开始要有#include如

预编译是把一个工程中较稳定的代码预先编译好放在一个文件里.这些预先编译好的代码可以是任何的C/C++代码。而输入程序后的运行,只是将代码编译成了obj(object)文件,所有obj文件经链接(link)成为可执行文件。而你说的执行,应该就是点击最后生成的.exe文件了。开始要有的#include,是表明要包含的头文件,或者其它的保存的代码文件。只有这样,你才可以引用到那个文件中的代码,来供目前的文件来使用。
至于你说的什么大型游戏的编程,应该也是这样的一套,因为C语言就是上述生成文件的套路。游戏的编程,初学的话可以建议看《游戏编程入门》( 美 哈本),这本书基于windows平台,是为几乎没有游戏开发经验的初学者写的,循序渐进,从2D讲到3D 的一些基本技术,其中的例子也非常经典,看完书基本就可以做出不错的2D 游戏了,也有了一定的3D基础了,之后再看一些深入的书籍像《Windows游戏编程大师技巧》。

㈡ c语言编译预处理

编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。

如果用一张图来表示:

读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理

[析] 伪指令主要包括以下四个方面

(1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的'出现不再被替换。

(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉

(3)头文件包含指令,如#include "FileName"或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。

包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(<>)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。

(4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。

注意:

预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。

㈢ c语言中“宏”是个什么东西 有什么意义

宏定义的作用在预编译阶段,形如 #define A B 就是宏定义了,作用就是在预编译阶段将程序中的A全部视为B,举个例子:
我们在程序最开始,声明如下宏定义
#define pi 3.1415926
那么在我们写程序的时候,我们可以直接使用pi作为一个常量来使用,那么当我们编译程序的时候,编译器会自动将程序中出现的pi替换成3.1415926

第二个例子,利用宏定义定义傻瓜函数
#define mul(A,B) A*B
那么我们可以将mul()在程序中当成函数来使用,为什么叫做傻瓜函数一会来解释,使用方法
mul(3,5) 那么这段代码就相当于计算3*5=15
那么当我们如下使用时就会出现问题
mul(3+2,3) 我们期待的结果是15,而实际结果是9,为什么呢?因为在程序会如下转换
3+2*3=3+6=9 这也就是为什么我们管宏定义出来的函数叫傻瓜函数的原因了~~~

楼主呀~~~完全手写,一定要好评呀!^_^

㈣ c语言的标识符

C语言的标识符主要分为以下三类:

  1. 关键字

    • 定义:关键字是C语言程序中的固定词汇,用于表示特定功能和用途。
    • 特点:不允许用作用户自定义标识符,以避免混淆和冲突。
    • 示例:if、else、while等,它们构成了C语言的基础结构,如条件判断、循环控制等。
  2. 预定义标识符

    • 定义:预定义标识符代表了C语言的库函数名称或预编译处理命令。
    • 特点:这些标识符是所有C程序共同使用的符号,为程序员提供了丰富的功能和便利的编程工具。
    • 示例:库函数名如printf、scanf、malloc等,预编译处理命令名如#include、#define等。
  3. 用户标识符

    • 定义:用户标识符是程序员自定义的名称,用于表示变量、函数、类型等。
    • 组成规则:由字母、数字和下划线组成,但第一个字符必须为字母。
    • 大小写敏感性:字母的大小写在C语言中具有重要意义,不同的大小写表示不同的标识符。例如,User和user是两个完全不同的标识符。

总结:C语言的标识符系统为程序设计提供了坚实的基础,关键字、预定义标识符和用户标识符各司其职,共同构建了C语言的标识符体系。理解这些标识符的分类和使用规则对于编写高效、可读性强的C程序至关重要。

㈤ VC棰勫勭悊鎸囦护涓庡畯瀹氢箟镄勫欑敤

銆銆鍒氭帴瑙﹀埌MFC缂栫▼镄勪汉寰寰浼氲猡FC 钖戝肩敓鎴愮殑钖勭嶅畯瀹氢箟鍜岄勫勭悊鎸囦护镓钖揿 浣嗘槸棰勫勭悊鍜屽畯瀹氢箟鍙堟槸C璇瑷镄勪竴涓寮哄ぇ宸ュ叿 浣跨敤瀹冧滑鍙浠ヨ繘琛岀亩鍗旷殑婧愪唬镰佹带鍒 鐗堟湰鎺у埗 棰勮︽垨钥呭畬鎴愪竴浜涚壒娈婄殑锷熻兘

銆銆 涓涓缁忓吀镄勪緥瀛

銆銆浣跨敤棰勫勭悊涓庡畯瀹氢箟链缁忓吀镄勪緥瀛愯帿杩囦簬锷犲湪涓涓澶存枃浠朵腑浠ラ伩鍏嶅ご鏂囦欢琚涓ゆ$紪璇 璇曟兂杩欑岖殑𨱍呭喌 链変竴涓鏂囦欢headerfile h 瀹冭鍖呭惈鍦╤eaderfile h涓 钖屾椂鍦╤eaderfile h 涓涔熻鍖呭惈浜 鐜板湪链変竴涓狢PP鏂囦欢 implement cpp 鍖呭惈浜呗eaderfile h 鍜宧eaderfile h

銆銆#include headerfile h

銆銆#include headerfile h

銆銆锅囱緃eaderfile h 涓瀹氢箟浜嗕竴涓鍏ㄥ眬鍙橀噺 iglobal

銆銆int iglobal

銆銆鍦ㄧ紪璇戠殑镞跺欑紪璇戝櫒涓ゆ$紪璇慼eaderfile 涔熷氨浼氩彂鐜癷global琚瀹氢箟浜嗕袱娆 杩欐椂灏变细鍙戠敓鍙橀噺閲嶅畾涔夌殑缂栬疟阌栾

銆銆浼犵粺镄勮В鍐冲姙娉曟槸浣跨敤#ifdef 浠ュ强#endif 𨱒ラ伩鍏嶅ご鏂囦欢镄勯吨澶岖紪璇 鍦ㄤ笂闱㈢殑渚嫔瓙涓 鍙闇瑕佸姞涓婅繖涔埚嚑琛

銆銆#ifndef *** artnose_ _ _ _headerfile_h

銆銆#define *** artnose_ _ _ _headerfile_h

銆銆int iglobal

銆銆#endif

銆銆浠旂粏镄勮冭槛涓婇溃镄勫畯瀹氢箟 浼氩彂鐜板綋缂栬疟鍣ㄧ紪璇戣繃涓娆headerfile h浠ュ悗 *** artnose_ _ _ _headerfile_h 杩欎釜瀹忓氨琚瀹氢箟浜 浠ュ悗瀵筯eaderfile h镄勭紪璇戦兘浼氲烦杩噄nt iglobal 杩欎竴琛 褰撶劧 *** artnose_ _ _ _headerfile_h 杩欎釜瀹忔槸鍙浠ヤ换镒忓畾涔夌殑 浣嗘槸杩欎釜瀹忔湰韬涓嶈兘鍜屽叾瀹冩枃浠朵腑瀹氢箟镄勫畯閲嶅 镓浠MFC鍦ㄨ嚜锷ㄧ敓鎴愮殑鏂囦欢涓镐绘槸浣跨敤涓涓闅忔満浜х敓镄勯暱搴﹂潪甯搁暱镄勫畯 浣嗘垜瑙夊缑杩欐病链夊繀瑕 鎴戝缓璁鍦ㄨ繖涓瀹忎腑锷犲叆涓浜涙湁镒忎箟镄勪俊鎭 姣旀柟浣滆 鏂囦欢钖 鏂囦欢鍒涘缓镞堕棿绛夌瓑 锲犱负鎴戜滑链夋椂鍊欎细蹇樿板湪娉ㄩ喷涓锷犲叆杩欎簺淇℃伅

銆銆鍦╒C Net 涓鎴戜滑涓崭细鍐岖湅瑙佽繖浜涘畯瀹氢箟浜 锲犱负鍦ㄨ繖閲屼细鏅阆崭娇鐢ㄤ竴涓棰勫勭悊鎸囦护

銆銆#pragma once

銆銆鍙瑕佸湪澶存枃浠剁殑链寮濮嫔姞鍏ヨ繖𨱒℃寚浠ゅ氨鑳藉熶缭璇佸ご鏂囦欢琚缂栬疟涓娆 杩欐浔鎸囦护瀹为檯涓婂湪VC 涓灏卞凡缁忔湁浜 浣嗘槸钥冭槛鍒板吋瀹规у苟娌℃湁澶澶氱殑浣跨敤瀹

銆銆 婧愪唬镰佺増链鎺у埗

銆銆褰撴垜浠涓鸿稿氩钩鍙板紑鍙戝氢釜鐗堟湰镄勬椂鍊欓勭紪璇戞寚浠ゅ拰瀹忓畾涔変篃鑳藉熷府鎴戜滑镄勫繖 锅囱炬垜浠鐜板湪涓篧INDOWS 鍜孡INUX寮鍙戜简涓濂楄蒋浠 鐢变簬杩欎袱绉岖郴缁熺殑涓嶅悓 鎴戜滑涓嶅缑涓嶅湪绋嫔簭鎺у埗婧愪唬镰佺殑鐗堟湰 姣旀柟鍐呭瓨镄勫垎閰 鎴戜滑鍙浠ュ湪LINUX涓娄娇鐢ㄦ爣鍑咰镄刴alloc 鍑芥暟 浣嗘槸鎴戜滑甯屾湜鍦 WINDOWS涓娄娇鐢℉eapAlloc API 涓嬮溃镄勪唬镰佹紨绀轰简杩欑嶆儏鍐

銆銆main锛堬级

銆銆{

銆銆钬︹︹︹︹︹︹︹

銆銆#ifdef _WINDOWS_PLATFORM

銆銆HeapAlloc锛 锛

銆銆#else

銆銆malloc锛 锛

銆銆#endif

銆銆钬︹︹︹︹︹︹︹

銆銆}

銆銆褰撴垜浠鍦╓INDOWS 骞冲彴涓婄紪璇戞ょ▼搴忕殑镞跺 鍙闇瑕佸畾涔埙WINDOWS_PLATFORM杩欎釜瀹 闾d箞HeapAlloc杩欐浔璇鍙ュ氨鑳藉熻捣浣灭敤浜 杩欐牱灏辫兘澶熻╂垜浠鍦ㄥ悓涓涓鏂囦欢涓涓轰笉钖岀殑骞冲彴瀹炵幇涓嶅悓鐗堟湰镄勪唬镰 钖屾椂淇濇寔绋嫔簭镄勮坛濂界粨鏋 鍦ㄨ稿氭儏鍐典笅 鎴戜滑杩桦彲浠ヤ负涓涓鏂规硶浣跨敤涓嶅悓镄勭畻娉 铹跺悗鐢ㄥ畯瀹氢箟𨱒ラ拡瀵逛笉钖岀殑𨱍呭喌阃夋嫨鍏朵腑镄勪竴涓杩涜岀紪璇 杩椤湪MFC搴旂敤绋嫔簭涓鏄浣跨敤寰楁渶澶氱殑 链鏄庢樉镄勫氨鏄鏂囦欢涓缁忓父瀛桦湪镄

銆銆#ifdef _DEBUG

銆銆钬︹︹︹︹︹︹︹ some code钬︹︹︹︹

銆銆#endif

銆銆杩欐牱镄勪唬镰 杩欎簺浠g爜鍦ㄥ簲鐢ㄧ▼搴忕殑璋冭瘯鐗堬纸DEBUG锛変腑浼氩彂鎸ュ叾浣灭敤

銆銆#Pragma 鎸囦护

銆銆鍦ㄦ墍链夌殑棰勫勭悊鎸囦护涓 #Pragma 鎸囦护鍙鑳芥槸链澶嶆潅镄勪简 瀹幂殑浣灭敤鏄璁惧畾缂栬疟鍣ㄧ殑鐘舵佹垨钥呮槸鎸囩ず缂栬疟鍣ㄥ畬鎴愪竴浜涚壒瀹氱殑锷ㄤ綔 鍏舵牸寮忎竴鑸涓

銆銆#Pragma Para

銆銆鍏朵腑Para 涓哄弬鏁 涓嬮溃𨱒ョ湅涓浜涘父鐢ㄧ殑鍙傛暟

銆銆message 鍙傛暟 Message 鍙傛暟鏄鎴戞渶锽沧㈢殑涓涓鍙傛暟 瀹冭兘澶熷湪缂栬疟淇℃伅杈揿嚭绐楀彛涓杈揿嚭鐩稿簲镄勪俊鎭 杩椤逛簬婧愪唬镰佷俊鎭镄勬带鍒舵槸闱炲父閲嶈佺殑 鍏朵娇鐢ㄦ柟娉曚负

銆銆#Pragma message锛 娑堟伅鏂囨湰 锛

銆銆褰撶紪璇戝櫒阆囧埌杩欐浔鎸囦护镞跺氨鍦ㄧ紪璇戣緭鍑虹獥鍙d腑灏嗘秷鎭鏂囨湰镓揿嵃鍑烘潵

銆銆褰撴垜浠鍦ㄧ▼搴忎腑瀹氢箟浜呜稿氩畯𨱒ユ带鍒舵簮浠g爜鐗堟湰镄勬椂鍊 鎴戜滑镊宸辨湁鍙鑳介兘浼氩缮璁版湁娌℃湁姝g‘镄勮剧疆杩欎簺瀹 姝ゆ椂鎴戜滑鍙浠ョ敤杩欐浔鎸囦护鍦ㄧ紪璇戠殑镞跺椤氨杩涜屾镆 锅囱炬垜浠甯屾湜鍒ゆ柇镊宸辨湁娌℃湁鍦ㄦ簮浠g爜镄勪粈涔埚湴鏂瑰畾涔変简_X 杩欎釜瀹忓彲浠ョ敤涓嬮溃镄勬柟娉

銆銆#ifdef _X

銆銆#Pragma message锛 _X macro activated锛 锛

銆銆#endif

銆銆褰撴垜浠瀹氢箟浜哶X 杩欎釜瀹忎互钖 搴旂敤绋嫔簭鍦ㄧ紪璇戞椂灏变细鍦ㄧ紪璇戣緭鍑虹獥鍙i噷鏄剧ず _X macro activated锛 鎴戜滑灏变笉浼氩洜涓轰笉璁板缑镊宸卞畾涔夌殑涓浜涚壒瀹氱殑瀹忚屾姄钥虫尃鑵浜

銆銆鍙︿竴涓浣跨敤寰楁瘆杈冨氱殑pragma鍙傛暟鏄痗ode_seg 镙煎纺濡

銆銆#pragma code_seg锛 [ section name [ section class ] ] 锛

銆銆瀹冭兘澶熻剧疆绋嫔簭涓鍑芥暟浠g爜瀛樻斁镄勪唬镰佹 褰撴垜浠寮鍙戦┍锷ㄧ▼搴忕殑镞跺椤氨浼氢娇鐢ㄥ埌瀹

銆銆链钖庝竴涓姣旇缉甯哥敤镄勫氨鏄涓婇溃镓璇寸殑#pragma once 鎸囦护浜

銆銆 VC棰勫畾涔夌殑瀹

銆銆鍦╒C涓链変竴绫诲畯骞朵笉鏄鐢辩敤鎴风敤#define璇鍙ュ畾涔夌殑 钥屾槸缂栬疟鍣ㄦ湰韬灏辫兘澶熻瘑鍒瀹冧滑 杩欎簺瀹忕殑浣灭敤涔熸槸鐩稿綋澶х殑 璁╂垜浠𨱒ョ湅绗涓涓 涔熸槸MFC涓浣跨敤寰楁渶棰戠箒镄勪竴涓 __FILE__

銆銆褰撶紪璇戝櫒阆囧埌杩欎釜瀹忔椂灏辨妸瀹冨𪾢寮鎴愬綋鍓嶈缂栬疟鏂囦欢镄勬枃浠跺悕 濂戒简 鎴戜滑椹涓婂氨鍙浠ユ兂鍒板彲浠ョ敤瀹冩潵锅氢粈涔 褰揿簲鐢ㄧ▼搴忓彂鐢熼敊璇镞 鎴戜滑鍙浠ユ姤锻婅繖涓阌栾鍙戠敓镄勭▼搴忎唬镰佸湪鍝涓鏂囦欢閲 姣旀柟鍦ㄦ枃浠秚est cpp涓链夎繖镙风殑浠g爜

銆銆try

銆銆{

銆銆char * p=new锛坈har[ ]锛

銆銆}

銆銆catch锛圕Exception *e 锛

銆銆{

銆銆TRACE锛 there is an error in file %s __FILE__锛

銆銆}

銆銆鍦ㄧ▼搴忚繍琛岀殑镞跺 濡傛灉鍐呭瓨鍒嗛厤鍑虹幇浜嗛敊璇 闾d箞鍦ㄨ皟璇旷獥鍙d腑浼氩嚭鐜皌here is an error in file test cpp 杩椤彞璇 褰撶劧 鎴戜滑杩桦彲浠ユ妸杩欎釜阌栾淇℃伅鏄剧ず鍦ㄥ埆镄勫湴鏂

銆銆濡傛灉鎴戜滑杩樿兘澶熻板綍阌栾鍙戠敓鍦ㄥ摢涓琛屽氨濂戒简 骞歌繍镄勬槸 涓巁_FILE__瀹忓畾涔変竴镙 杩樻湁涓涓瀹忚板綍浜嗗綋鍓崭唬镰佹墍鍦ㄧ殑琛屾暟 杩欎釜瀹忔槸__LINE__ 浣跨敤涓婇溃镄勪袱涓瀹 鎴戜滑鍙浠ュ啓鍑轰竴涓绫讳技浜嵘C鎻愪緵镄𪞝SSERT璇鍙 涓嬮溃鏄鏂规硶

銆銆#define MyAssert锛坸锛

銆銆if锛堬紒锛坸锛夛级

銆銆MessageBox锛坃_FILE__ __LINE__ NULL MB_OK锛

銆銆鎴戜滑鍦ㄥ簲鐢ㄧ▼搴忎腑鍙浠ヨ薄浣跨敤ASSERT璇鍙ヤ竴镙蜂娇鐢ㄥ畠 鍦ㄩ敊璇鍙戠敓镞 瀹冧细寮瑰嚭涓涓瀵硅瘽妗 鍏舵爣棰桦拰鍐呭瑰憡璇変简鎴戜滑阌栾鍙戠敓镄勬枃浠跺拰浠g爜琛屽彿 鏂逛究鎴戜滑镄勮皟璇 杩椤逛簬涓嶈兘浣跨敤ASSERT璇鍙ョ殑椤圭洰𨱒ヨ存槸闱炲父链夌敤镄

銆銆闄や简杩欎袱涓瀹忎互澶 杩樻湁璁板綍缂栬疟镞堕棿镄刜_TIME__ 璁板綍镞ユ湡镄刜_DATE__ 浠ュ强璁板綍鏂囦欢淇鏀规椂闂寸殑__TIMESTAMP__瀹

銆銆浣跨敤杩欎簺棰勫畾涔夌殑瀹 鎴戜滑鍑犱箮鍙浠ョ敓鎴愬拰VC鑳藉熺敓鎴愮殑涓镙峰畬鏁寸殑婧愪唬镰佷俊鎭鎶ヨ〃

銆銆 缁撹

lishixin/Article/program/net/201311/13360

㈥ C语言文件的编译与执行的四个阶段并分别描述

开发C程序有四个步骤:编辑、编译、连接和运行。

任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。

4、运行:执行,获取运行结果的EXE文件。

(6)C语言预编译的例子扩展阅读:

将C语言代码分为程序的几个阶段:

1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。

2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。

3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。

4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。

热点内容
线上编程价格 发布:2025-04-09 13:01:57 浏览:322
和平精英里k层的密室密码是多少 发布:2025-04-09 12:55:05 浏览:706
关掉加密 发布:2025-04-09 12:50:46 浏览:892
sql数据库导出表结构 发布:2025-04-09 12:50:02 浏览:175
安卓在哪里下载吃鸡亚服 发布:2025-04-09 12:43:08 浏览:145
java编译器安卓版推荐 发布:2025-04-09 12:33:48 浏览:59
c内存存储结构 发布:2025-04-09 12:22:53 浏览:749
庐江县编程 发布:2025-04-09 12:15:48 浏览:521
怎么添加地图到csgi服务器 发布:2025-04-09 12:13:34 浏览:268
iphone6s密码怎么取消 发布:2025-04-09 11:54:21 浏览:379