c語言的巨集定義缺陷
| 定義1:#define assert(e) if(!e) _assert_error (__FILE__, __LINE__ )
| 當 if(x>0 && y>0) assert(x>y);
| else assert(y>x);
| 巨集會被展開為:if(x>0 && y>0) if(!x>y) _assert_error ("foo.c", 37 );
| else if(!y>x) _assert_error ("foo.c", 39 );
| 從而形成 else if結構,與期待的結果不一致
| 定義2:#define assert(e) {if(!e) _assert_error (__FILE__, __LINE__ );}
相關推薦
c語言巨集定義#define
1. 利用define來定義 數值巨集常量 #define 巨集定義是個演技非常高超的替身演員,但也會經常耍大牌的,所以我們用它要慎之又慎。它可以出現在程式碼的任何地方,從本行巨集定義開始,以後的程式碼就就都認識這個巨集了;也可以把任何東西定義成巨集。因為編譯器會在預編譯的時候用真身替換
《6.C語言巨集定義與預處理、函式和函式庫》
《6.C語言巨集定義與預處理、函式和函式庫》 第一部分、章節目錄 4.6.1.C語言預處理理論 4.6.2.C語言預處理程式碼實戰 4.6.3.巨集定義1 4.6.4.巨集定義2 4.6.5.函式的本質 4.6.6.函式的基本使用 4.6.7.遞迴函式 4.6.8.函式庫 4.6.9.字
C語言巨集定義和巨集定義函式
轉自:http://blog.sina.com.cn/s/blog_861912cd0100tc94.html 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既
C語言巨集定義中#define中的井號#的使用
#include <stdlib.h> #include <stdio.h> #include <string.h> typedef enum { E_1, E
簡單的C語言巨集定義結合全域性變數的方法實現微控制器串列埠實現透傳模式
何謂透傳? 根據百度百科給出的定義如下: 透傳,即透明傳輸(pass-through),指的是在通訊中不管傳輸的業務內容如何,只負責將傳輸的內容由源地址傳輸到目的地址,而不對業務資料內容做任何改變。 在現實微控制器產品開發過程中,如果存在多個
c語言巨集定義函式如何呼叫
直接呼叫即可。如下示例: #include<stdio.h> #define sum(b,c){int d=0;d=b+c;printf("兩者的和:%d\n",d);} int main() {  
C語言——巨集定義
C語言——巨集定義 宗旨:技術的學習是有限的,分享的精神是無限的。 注意:巨集定義不是函式!! 一般用來簡化操作的,但又能避免函式呼叫那樣需要進行切換環境,花費時間。例如: #define max (a,b) (a>b?a:b) #define MALLOC(n,
C語言巨集定義,內建巨集,__FILE__,__LINE__,## 用法
當然巨集定義非常重要的,它可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 下面列舉一些成熟軟體中常用得巨集定義 1,防止一個頭檔案被重複包含 #ifndef COMDEF_H #define COMDEF_H //標頭檔案內容 … #endif 2,重
C語言巨集定義方法總結
巨集的單行定義 #define A(x) T_##x #define B(x) #@x #define C(x) #x 我們假設:x=1,則有: A(1)------〉T_1 B(1)------〉 '1 ' C(1)------〉 "1 "
C語言巨集定義實現sizeof功能
可以使用如下兩個巨集定義實現類似sizeof的功能 //針對T為一個型別名的情況 #define _sizeof_type(T) (size_t)((T*)0 + 1) //針對T為一個變數或者
C語言巨集定義的使用
巨集定義採用define關鍵字進行定義,是簡單的字串替換,主要分有引數和無引數兩種。這裡就平常碰到的使用方法做一個總結,方便以後檢視。 1、#define MAX_NUM 1000 普通巨集定義,最大值為1000 2、#define NULL_PTR ((v
C語言巨集定義的幾個坑和特殊用法
總結一下C語言中巨集的一些特殊用法和幾個容易踩的坑。由於本文主要參考GCC文件,某些細節(如巨集引數中的空格是否處理之類)在別的編譯器可能有細微差別,請參考相應文件。 巨集基礎 巨集僅僅是在C預處理階段的一種文字替換工具,編譯完之後對二進位制程式碼不可見。基本用法如下
C語言巨集定義、巨集函式、內建巨集與常用巨集
前言: 在C語言中,變數型別、迴圈控制、基礎語法等與其他高階語言基本無異;而C語言(C++)特有的兩把雙刃劍指標和巨集定義/巨集函式使得C語言在底層開發中披荊斬棘、無所不能。這兩個概念涉及範圍比較廣,其分支點也比較多,可謂星羅棋佈,但這每顆星都足以照亮C語言因其
C++ 語言巨集定義函式的使用(定義單行和多行)
昨天筆試問的,不會….. 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。 巨集定義中允許包含兩行以上命令的情形,此時必
c語言 巨集定義多條語句
#include <stdio.h> #include <stdlib.h> #define FUCK(a, b) \ do{ \ in
C語言巨集定義時#(井號)和##(雙井號)的用法
http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html #在英語裡面叫做 pound 在C語言的巨集定義中,一個#表示字串化;兩個#代表concatenate(串聯,字元之間相加的意思)
33.C語言巨集定義和預處理
33.1.原始碼到可執行程式過程 (1)原始碼.c檔案->(編譯)->elf可執行程式。 (2)原始碼.c->(編譯)->目標檔案.o->(連結)->elf可
C語言巨集定義高階用法總結
1、巨集定義函式頭 或字串連結 #define Function(name) void Func##name(void) 使用舉例 Function(mytest) { } 編譯器回編譯成 void Funcmytest(void) { } 2、多行巨集定義並在巨集定
c語言的巨集定義缺陷
| 考慮asert巨集的定義。 | 定義1:#define assert(e) if(!e) _assert_error (__FILE__, __LINE__ ) | 當 if(x>0 && y>0) asser
C語言巨集的定義和巨集的使用方法(#define)
1、巨集的功能介紹 在 C 語言中,可以採用命令 #define 來定義巨集。該命令允許把一個名稱指定成任何所需的文字,例如一個常量值或者一條語句。在定義了巨集之後,無論巨集名稱出現在原始碼的何處,前處理器都會把它用定義時指定的文字替換掉。 關於巨集的一個常見應用就是,用它定義數值常量的名稱: