c語言if宏
1. c語言中的條件編譯 #if define(宏名稱)為什麼錯誤了
預編譯指令格式錯誤。
#if define (IBMPC)應改為#ifdef IBMPC
這種結構是為了防止頭文件嵌套包含。一般的用法是
#ifndef _IBMPC_H
#define _IBMPC_H
#include"ibmpc.h"
....
#endif
2. #if 及宏定義,是不是C語言里常有這種「開關」用法
#if確實是起到了一個開關作用,但是不同於if語句,if語句只是執行流的變化,最終代碼還是被編譯了,用#if的話,只有後面為真的情況下才編譯,你上面的定義後面需要跟數字,比如
#define USE_Port_B 0
那麼相應的代碼就不會被編譯,說一個簡單的情況
#if WINDOWS
//code
#endif
比方說你檢查系統的時候,如果是windows的話就定義宏WINDOWS,就是說只有在windows下才會編譯code部分
54文人網
3. c語言中的#ifndef,def,endif等宏是什麼意思
這些是條件編譯。
#ifdef 當後續宏被定義時,代碼段會被編譯。
#ifndef 當宏未定義時編譯。
#endif 條件編譯的結束標記。
4. 請問在C語言中#if (0) define .. ; 請問這個宏定義會定義么例如例子: #if (0) define gets(n)
沒有說得那麼繁瑣.
因為對於一個大程序而言,我們可能要定義很多常量( 不管是放在源文件還是頭文件 ),那麼我們有時考慮定義某個常量時,我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.if defined宏正是為這種情況提供了解決方案.舉個例子,如下:
#define ....
#define ....
........
........
#define a 100
.......
此時,我們要檢查a是否定義(假設我們已經記不著這點了),或者我們要給a一個不同的值,就加入如下句子
#if defined a
#undef a
#define a 200
#endif
上述語句檢驗a是否被定義,如果被定義,則用#undef語句解除定義,並重新定義a為200
同樣,檢驗a是否定義:
#ifndef a //如果a沒有被定義
#define a 100
#endif
以上所用的宏中:#undef為解除定義,#ifndef是if not defined的縮寫,即如果沒有定義。
這就是#if defined 的唯一作用!
5. C語言宏定義意思
我繼續回答你的追問:
這個 if 由於後面緊跟了;所以什麼也不會做,只是把exp執行了一遍,而後面的exse我覺得可能是筆誤,應該是else,那麼這個宏的意思其實就是,當exp結果為非0(即false)時,那麼執行assertion_failure,後面的參數#exp,誠如前面的解答是exp的字元化,而_FILE_ _BASE_FILE_ _LINE_也都是宏,是在c或c++基本庫文件中定義好的,分別當前文件名,主程序文件名和該行代碼的行數
最後友情提醒下,宏定義尤其是涉及邏輯代碼的,最好放在do{ }while(0)裡面,這樣可以保證其在大多數條件下都可以正常的執行
6. c語言的宏定義 if defined
沒有說得那麼繁瑣.
因為對於一個大程序而言,我們可能要定義很多常量(
不管是放在源文件還是頭文件
),那麼我們有時考慮定義某個常量時,我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.if
defined宏正是為這種情況提供了解決方案.舉個例子,如下:
#define
....
#define
....
........
........
#define
a
100
.......
此時,我們要檢查a是否定義(假設我們已經記不著這點了),或者我們要給a一個不同的值,就加入如下句子
#if
defined
a
#undef
a
#define
a
200
#endif
上述語句檢驗a是否被定義,如果被定義,則用#undef語句解除定義,並重新定義a為200
同樣,檢驗a是否定義:
#ifndef
a
//如果a沒有被定義
#define
a
100
#endif
以上所用的宏中:#undef為解除定義,#ifndef是if
not
defined的縮寫,即如果沒有定義。
這就是#if
defined
的唯一作用!
7. C語言: 定義一個宏,比較a、b的大小,不要用大於、小於和IF運算符
代碼如下:
#include "stdio.h"
void main()
{
float a, b ,c;
printf ("請輸入三個數,會為你從大到小排列! ");
scanf("%f %f %f",&a,&b,&c);
if(a>b>c){printf("%f,%f,%f",a,b,c);}
else if(a>c&&c>b){printf("%f,%f,%f",a,c,b);}
else if(b>a&&a>c){printf("%f,%f,%f",b,a,c);}
else if(b>c&&c>a){printf("%f,%f,%f",b,c,a);}
else if(c>b&&b>a){printf("%f,%f,%f",c,b,a);}
else if(c>a&&a>b){printf("%f,%f,%f",c,a,b);}
//編譯器不識別三個連續的符號運算,必須用且(&&)和或(||)he否(!)
}
(7)c語言if宏擴展閱讀
C語言中宏定義的優點
方便程序的修改
使用簡單宏定義可用宏代替一個在程序中經常使用的常量,這樣在將該常量改變時,不用對整個程序進行修改,只修改宏定義的字元串即可,而且當常量比較長時, 可以用較短的有意義的標識符來寫程序,這樣更方便一些。
相對於==全局變數==兩者的區別如下:
1、宏定義在編譯期間即會使用並替換,而全局變數要到運行時才可以。
2、宏定義的只是一段字元,在編譯的時候被替換到引用的位置。在運行中是沒有宏定義的概念的。而變數在運行時要為其分配內存。
3、宏定義不可以被賦值,即其值一旦定義不可修改,而變數在運行過程中可以被修改。
4、宏定義只有在定義所在文件,或引用所在文件的其它文件中使用。 而全局變數可以在工程所有文件中使用,只要再使用前加一個聲明就可以了。換句話說,宏定義不需要extern。
8. #if 及宏定義,是不是C語言里常有這種用法
是的,經常有程序這么用。你可以看看一些經典的開源程序,有很多這樣的代碼。
9. C語言 #if語句後的宏沒定義,會編譯錯誤嗎為什麼
如果沒有定義AAA那麼不會報錯,也不會以#if 0來處理,而是被忽略
如果定義了AAA ,還要看情況
#define AAA
#if AAA //這個會報錯
.....
#endif
===================
#define AAA 666
#if AAA //這個可以
.....
#endif
========
僅僅判斷一個宏是否被定義可以用#ifdef
#define AAA
#ifdef AAA //這樣就不會有問題
.....
#endif