A. c語言關於結構定義和條件編譯 VC++6.0 為什麼把結構聲明放到函數聲明後面和主函數里都編譯錯誤
你的函數參數是結構類型變數,如果放在函數後或主函數內,則系統編譯時,因為沒定義相關類型而出錯.
B. 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. C語言中條件編譯和If語句之間的差別,各適用於什麼情況
條件編譯是C語言中預處理部分的內容,它是編譯器編譯代碼時最先處理的部分,
條件編譯裡面有判斷語句,比如 #if 、#else 、#elif 及 #endif
它的意思是如果宏條件符合,編譯器就編譯這段代碼,否則,編譯器就忽略這段代碼而不編譯,如
#define A 0 //把A定義為0
#if (A > 1)
printf("A > 1"); //編譯器沒有編譯該語句,該語句不生成匯編代碼
#elif (A == 1)
printf("A == 1"); //編譯器沒有編譯該語句,該語句不生成匯編代碼
#else
printf("A < 1"); //編譯器編譯了這段代碼,且生成了匯編代碼,執行該語句
#endif
而 if 語句則不然,if 是 C 語言中的關鍵字,它根據表達式的計算結果來覺定執行那個語句,它裡面的每個分支都編譯了的, 如
#define A 0
if (A > 1)
printf("A > 1"); //編譯器編譯該語句,但因為A == 0 未執行
else if(A == 1)
printf("A == 1"); //編譯器編譯該語句,但因為A == 0 未執行
else
printf("A < 1"); //編譯器編譯該語句,因為A == 0 故執行
所以 簡單地講,條件編譯是根據 宏條件 選擇性地編譯語句,它是編譯器在編譯代碼時完成的;
條件語句是根據條件表達式選擇性地執行語句,它是在程序運行時進行的。
D. 關於C語言的條件編譯
作用一:編譯生成的可執行代碼或者只包含程序段1 或者只包含程序段2 ,可執行程序大小會變小;
作用二:可以靈活的通過宏定義標識符實現同一函數的不同版本,例如
#ifdef 標識符
func1(...) {...}
#else
func1(...) {...}
#endif
這樣func1函數通過宏定義可以有不同的實現
E. 條件編譯和選擇結構的區別
一個是編譯時處理,一個是運行時處理。
運行時處理需要更多資源。
F. 關於C語言中頭文件的條件編譯的問題
例如,常會將結構體類型的定義放在頭文件中(例如FILE結構體,tm結構體等),如果不加條件編譯,那麼就可能會出現同一個程序中的不同文件由於包含了同一個頭文件而導致同一個結構體類型的重復定義,而C中不允許重復定義,所以會出錯。
G. 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
H. C語言中條件編譯和選擇結構的區別是什麼
條件編譯是有條件地編譯,就是不符合條件時,那代碼就不編譯,選擇結構就把所有的代碼都編譯!
I. 程序設計題:編程序實現功能:通過條件編譯方式確定程序運行時實現字元串拷貝還是字元串連接
//#define STR_FUNC_SWITCH //宏開關
#ifdef STR_FUNC_SWITCH
#define strflex strcpy //函數宏
#else
#define strflex strcat //函數宏
#endif
//以上為條件編譯改變函數實現的基本結構
//通過宏開關來控制函數宏對應的是哪個函數
//程序中調用宏名來使用
...
strflex(dest_str,src_str);
...
J. #ifndef的形式
「 條件編譯」命令允許對程序中的內容選擇性地編譯,即可以根據一定的條件選擇是否編譯。
條件編譯的命令主要有以下幾種 :
形式1
#ifndef 標識符
程序段 1
#else
程序段 2
#endif
它的作用是當 「 標識符」沒有由# define定義過了。則編譯「 程序段 1 」 。 否則編譯「 程序段 2 」 。其中如果不需要編譯「 程序段 2 」。則上述形式可以變換 為:
#ifndef 標識符
程序段 1
#endif
形式2
#ifndef 標識符
# define 標識符
程序段 1
#else
程序段 2
#endif
它的作用是當 「 標識符 沒有由# define定義過。 則編譯「程序段 1」。否則編譯「程序段 2」 。同樣當無「 程序段2 」時。(作用與形式1完全相同)則上述形式變換為:
# ifndef 標識符
# define 標識符
程序段 1
#endif
形式3
#if 表達式
程序段 1
#else
程序段 2
#endif
它的作用是 當「表達式」值為真時。編譯程序段1。否則則編譯程序段2。同樣 當無程序段 2時,則上述形式變換為 :
#if 表達式
程序段 1
#endif
以上三種形式的條件編譯預處理結構都可以嵌套使用。 當#else後嵌套 #if 時,可以使用預處理命令 # elif , 它相當於 #else#if。在程序中使用條件編譯主要是為了方便程序的調試和移植。