條件編譯開關有什麼作用
Ⅰ 條件編譯在程序設計中有哪些 用途
1:就是是一段代碼,或功能不被編譯,也就是從程序中去掉某些功能。這在,使用同一套代碼開發同步產品是經常用到。
Ⅱ stm32下面的編譯 條件編譯 什麼意思,跪求具體解釋一下。一定採納。。。
一個條件編譯,根據GLOBALS的值來決定EXT開頭的變數是否全局可見。相當於你GLOABALS賦值為1,有效的話,就是相當於打開了全局聲明開關,所有EXT開頭的變數的聲明,比如EXT xxxx;就變成了extern xxxx;這樣所有的c文件都能看到這個聲明,知道這個變數是全局的,如果GLOBALS為0,即全局聲明的開關沒有打開,則EXT xxxx變數,就變成了xxxx,變成了不帶extern的,變成了局部變數聲明。
Ⅲ 關於c語言的條件編譯
作用一:編譯生成的可執行代碼或者只包含程序段1 或者只包含程序段2 ,可執行程序大小會變小;
作用二:可以靈活的通過宏定義標識符實現同一函數的不同版本,例如
#ifdef 標識符
func1(...) {...}
#else
func1(...) {...}
#endif
這樣func1函數通過宏定義可以有不同的實現
Ⅳ 預處理的條件編譯有什麼用RT
你這個例子不好,條件編譯不是這么用的。 它是為了防止重復編譯而存在的
請參考如下信息:
條件編譯指令將決定那些代碼被編譯,而哪些是不被編譯的。可以根據表達式的值或者某個特定的宏是否被定義來確定編譯條件。 1.#if指令 #if指令檢測跟在製造另關鍵字後的常量表達式。如果表達式為真,則編譯後面的代碼,直到出現#else、#elif或#endif為止;否則就不編譯。 2.#endif指令 #endif用於終止#if預處理指令。 #define DEBUG 0 main() { #if DEBUG printf("Debugging\n"); #endif printf("Running\n"); } 由於程序定義DEBUG宏代表0,所以#if條件為假,不編譯後面的代碼直到#endif,所以程序直接輸出Running。 如果去掉#define語句,效果是一樣的。 3.#ifdef和#ifndef #define DEBUG main() { #ifdef DEBUG printf("yes\n"); #endif #ifndef DEBUG printf("no\n"); #endif } #if defined等價於#ifdef; #if !defined等價於#ifndef 4.#else指令 #else指令用於某個#if指令之後,當前面的#if指令的條件不為真時,就編譯#else後面的代碼。#endif指令將中指上面的條件塊。 #define DEBUG main() { #ifdef DEBUG printf("Debugging\n"); #else printf("Not debugging\n"); #endif printf("Running\n"); } 5.#elif指令 #elif預處理指令綜合了#else和#if指令的作用。 #define TWO main() { #ifdef ONE printf("1\n"); #elif defined TWO printf("2\n"); #else printf("3\n"); #endif } 程序很好理解,最後輸出結果是2。
Ⅳ 什麼叫條件編譯,什麼叫文件包含,舉個例子,分別有什麼作用於意義
條件編譯例子:
#if 表達式
{……}
#else
{……}
#endif
說明:有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是「條件編譯」
文件包含:
#include <stdio.h>//頭文件
#include "hello.h"//自定義的頭文件
說明:頭文件作為一種包含功能函數、數據介面聲明的載體文件,包含文件相當於把頭文件的內容載入到當前頁面
Ⅵ c語言中,什麼是條件編譯
條件編譯屬於三種宏定義中的一種,條件指示符的最主要目的是防止頭文件的重復包含和編譯,例如:一個c文件包含同一個h文件多次,如果不加#ifndef宏定義,會出現變數重復定義的錯誤
條件編譯常用的有四個預處理命令:#if、#else、#elif、#endif。
#if指令的形式為:
#if 常量表達式
代碼塊
#endif
#if後面的常量表達式為值,則編譯它與#endif之間的代碼,否則跳過這些代碼。指令#endif標識一個#if塊的結束。
#else被使用來標志#if的末尾和#else塊的開始。這是必須的,因為任何#if僅有一個#endif與之關聯。
#elif意指"else if",它形成一個if else if嵌套語句用於多種編譯選擇。#elif後面跟一個常量表達式,如果表達式是真,則編譯其後的代碼塊,不對其他#elif表達式進行檢測,否則順序測試下一塊。常見的形式如下:
形式1:
#ifdef 標識符
/*程序段 1*/
#else
/*程序段 2*/
#endif
它的作用是當標識符已經由#define定義過了,則編譯程序段1,否則編譯程序段2,也可以使用簡單形式
#ifdef 標識符
/*程序段1*/
#endif
形式2:
#ifndef 標識符
#define 標識符
/*程序段 1*/
#else
/*程序段 2*/
#endif
它的作用是當標識符沒有由#define定義過,則編譯程序段1,否則編譯程序段2 ,也可以使用簡單形式
#ifndef 標識符
#define 標識符
/*程序段 1*/
# endif
形式3:
#if 表達式
/*程序段 1*/
#else
*程序段 2*/
# endif
它的作用是 當「表達式」值為真時編譯程序段1。否則則編譯程序段2,也可以使用簡單形式
# if 表達式
/*程序段 1*/
# endif
形式4:
#if 表達式1
/*程序段 1*/
#elif 表達式2
/*程序段 2*/
............
#elif 表達式n
/*程序段n */
#endif
它的作用是當「表達式1」值為1時編譯程序段1,表達式2的值為真是編譯程序段2,否則依次順序判斷到表達式n。
最後,條件編譯的條件是一個常量表達式,支持邏輯與&&和或||運算。以上四種形式的條件編譯預處理結構都可以嵌套使用,
標識符: 在理論上來說可以是自由命名的,但每個頭文件的這個標識符都應該是唯一的。標識的命名規則一般是頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h。
#ifndef _STDIO_H_
#define _STDIO_H_
/*程序段 */
#endif
Ⅶ C++中的條件編譯是怎麼一回事能舉例解釋一下嗎
意思是在預編譯的時候 如果發現NNX沒有被define 那麼就執行#ifndef NNX 和#else 之間的內容
#define NNX //定義NNX
xxxxxxxxx
xxxxxxxx
如果NNX被define了就執行#else和#endif之間的內容
xxxxxx
xxxxx
//註:#ifndef 可以翻譯成if not define
它和#ifdef相反 if define
Ⅷ C++中這個條件編譯哪裡用錯了
這種情況下也用條件編譯?
條件編譯——根據指定的條件有選擇的編譯代碼塊的相應部分
#if a>=65&&a<=90
a+=32;
cout<<"轉換成小寫字母為:"<<a<<"."<<endl;
#else
a-=32;
cout<<"轉換成大寫字母為:"<<a<<"."<<endl;
#endif
默認編譯的應該是:
a-=32;
cout<<"轉換成大寫字母為:"<<a<<"."<<endl;
程序運行的時候已經編譯好了,所以不論你輸入什麼字母都按編譯好的程序執行,也就是執行
a-=32;
cout<<"轉換成大寫字母為:"<<a<<"."<<endl;
明白?
----------------------------------
char a;
// cout<<"請輸入一個字母:"<<endl;
// cin>>a;
bool bl = (a>=65&&a<=90);
cout<<"\t------"<<a<<"="<<(int)a<<"---"<<bl<<"---"<<endl;
編譯的時候a還沒有值,我用VC6.0編譯運行的結果是?,asc碼值=56,也就是bl(上面的條件編譯標識)為FALSE,當然執行後面的了
當然編譯器不同,編譯運行的結果也不同,有很大的不確定性,這也是條件編譯開關很少用變數的原因。
Ⅸ C語言中條件編譯的作用
條件編譯屬於三種宏定義中的一種,條件指示符的最主要目的是防止頭文件的重復包含和編譯,例如:一個c文件包含同一個h文件多次,如果不加#ifndef宏定義,會出現變數重復定義的錯誤
條件編譯常用的有四個預處理命令:#if、#else、#elif、#endif。
#if指令的形式為:
#if常量表達式
代碼塊
#endif
#if後面的常量表達式為值,則編譯它與#endif之間的代碼,否則跳過這些代碼。指令#endif標識一個#if塊的結束。
#else被使用來標志#if的末尾和#else塊的開始。這是必須的,因為任何#if僅有一個#endif與之關聯。
#elif意指"else if",它形成一個if else if嵌套語句用於多種編譯選擇。#elif後面跟一個常量表達式,如果表達式是真,則編譯其後的代碼塊,不對其他#elif表達式進行檢測,否則順序測試下一塊。常見的形式如下:
形式1:
#ifdef標識符
/*程序段1*/
#else
/*程序段2*/
#endif
它的作用是當標識符已經由#define定義過了,則編譯程序段1,否則編譯程序段2,也可以使用簡單形式
#ifdef標識符
/*程序段1*/
#endif
形式2:
#ifndef標識符
#define標識符
/*程序段1*/
#else
/*程序段2*/
#endif
它的作用是當標識符沒有由#define定義過,則編譯程序段1,否則編譯程序段2 ,也可以使用簡單形式
#ifndef標識符
#define標識符
/*程序段1*/
#endif
形式3:
#if表達式
/*程序段1*/
#else
*程序段2*/
#endif
它的作用是 當「表達式」值為真時編譯程序段1。否則則編譯程序段2,也可以使用簡單形式
#if表達式
/*程序段1*/
#endif
形式4:
#if表達式1
/*程序段1*/
#elif表達式2
/*程序段2*/
............
#elif表達式n
/*程序段n*/
#endif
它的作用是當「表達式1」值為1時編譯程序段1,表達式2的值為真是編譯程序段2,否則依次順序判斷到表達式n。
最後,條件編譯的條件是一個常量表達式,支持邏輯與&&和或||運算。以上四種形式的條件編譯預處理結構都可以嵌套使用,
標識符: 在理論上來說可以是自由命名的,但每個頭文件的這個標識符都應該是唯一的。標識的命名規則一般是頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h。
#ifndef_STDIO_H_
#define_STDIO_H_
/*程序段*/
#endif
Ⅹ C語言中的條件編譯有什麼作用
條件編譯就是為了實現在滿足一定條件時編譯某一組語句,而再不滿足條件時編譯另一組語句!
事實上,它確實與條件語句相似,但是它們是不一樣的。條件語句中的各個語句都是要經過編譯的,而條件編譯中的部分語句不需要進行編譯(請注意這兒是編譯不是執行)。條件編譯的作用在編寫大型程序的時候就會相當的明顯,因為它可以減少被編譯的語句,從而減少目標程序的長度,減少運行時間。
具體怎樣使用的話,這個你最好看一些教程,要想在這個地方給你講清還是比較麻煩的。不過總體來講它還是比較簡單的,你看教程的話應該比較容易看懂!