讀書筆記 C 基礎知識溫習 預處理指令

2021-06-03 02:50:52 字數 1689 閱讀 9241

#include 檔案包含

最常見的用法是:

#include //標準庫標頭檔案

#include //舊式的標準庫標頭檔案

#include "io.h" //使用者自定義的標頭檔案

#include "../file.h" //unix下的父目錄下的標頭檔案

#include "/usr/local/file.h" //unix下的完整路徑

#include "..\file.h" //dos下的父目錄下的標頭檔案

#include "d:\usr\local\file.h" //dos下的完整路徑

notice:

1、我們用還是?

我們主張使用,而不是,為什麼呢?我想你可能還記得我曾經給出過幾點理由,這裡我大致的說一下:首先,.h格式的標頭檔案早在98年9月份就被標準委員會拋棄了,我們應該緊跟標準,以適合時代的發展。其次,iostream.h只支援窄字符集,iostream則支援窄/寬字符集。

還有,標準對iostream作了很多的改動,介面和實現都有了變化。最後,iostream元件全部放入namespace std中,防止了名字汙染。

2、和"io.h"的區別?

其實他們唯一的區別就是搜尋路徑不同:

對於#include ,編譯器從標準庫路徑開始搜尋

對於#include "io.h" ,編譯器從使用者的工作路徑開始搜尋

條件編譯

#if#else

#elif

#endif

#if defined

#ifdef

巨集替換#define 可以定義符號常量、函式功能、重新命名、字串的拼接等各種功能

#undef

#line

#line number filename

例如:#line 30 a.h 

其中,檔名a.h可以省略不寫。

這條指令可以改變當前的行號和檔名,例如上面的這條預處理指令就可以改變當前的行號為30,檔名是a.h。初看起來似乎沒有什麼用,不過,他還是有點用的,那就是用在編譯器的編寫中,我們知道編譯器對c++原始碼編譯過程中會產生一些中間檔案,通過這條指令,可以保證檔名是固定的,不會被這些中間檔案代替,有利於進行分析。

#error 這條指令主要是給出錯誤資訊

#ifndef __objc__

#error "this code only supports object-c."

#endif

總的來說,這條指令的目的就是在程式崩潰之前能夠給出一定的資訊。

#pragma  提供機器專用的特性。【慎用】

主要功能是為編譯程式提供非常規的控制流資訊

注意:#pragma與編譯器有關。所以我們有些mac下用oc編寫的code在windows下就不認識了。

標準預處理器巨集

__line__ 當前原始檔中的**行號,十進位制整數

__file__ 原始檔名稱,字串字面量

__date__ 原始檔處理日期,字串字面量 (mmm dd yyyy)

__time__  原始檔編譯時間,字串字面量 (hh:mm:ss)

__stdc__ 取決於實現

__cplusplus c++中定義為 197711l

讀書筆記 C 基礎知識溫習 堆疊

概念 棧區 heap 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。堆區 stack 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。全域性區 靜態區 static 全域性變數和靜...

預處理基礎知識

預處理符號 file 當前檔案的原檔案名字 line 檔案當前的行號 data 檔案編譯的日期 time 檔案編譯的時間 sdtc 如果編譯器準尋ansic,其值為1,否則未定義 define巨集和 undef巨集 define name name 定義乙個巨集定義 undef 移除乙個巨集定義 和...

Hadoop讀書筆記 基礎知識二

hadoop資料型別 為了讓鍵 值對可以在集群上移動,mapreduce框架提供了一種序列化鍵 值對的方法。因此,只有那些支援這種序列化的類能夠在框架中充當鍵 值。實現writable介面的類可以是值 實現writablecomparable介面的類可以是鍵 值。鍵 值對經常使用的資料型別列表。這些...