c語言條件編譯程序問題
因為 你用的和你看到的頭文件是為開發者方便服務的,不是為你服務的。 有了條件編譯,開發人員可以很方便的為多種情形(比如不同硬體環境,不同軟體環境)維護一套代碼。 發布時原樣發布出來就是你看到的樣子。
你的使用條件和使用環境確定的話,可以去掉條件編譯的,只是需要花時間精力,沒人去干而已。
可以下載嘗試下中文版的C語言:習語言, 頭文件里很少條件編譯。
② c語言條件編譯不通過,編譯器顯示error:stray '#' in program。怎麼錯了
1、這個問題很多情況下是由於路徑設置的問題引起的,「CL.exe」是VC使用真正的編譯器(編譯程序),其路徑在「VC根目錄\VC98\Bin」下面,可以到相應的路徑下找到這個應用程序。
2、因此問題可以按照以下方法解決:點擊VC「TOOLS(工具)」—>「Option(選擇)」—>「Directories(目錄)」重新設置「Excutable Fils、Include Files、Library Files、Source Files」的路徑。很多情況可能就一個盤符的不同(例如VC裝在C,但是這些路徑全部在D),改過來就OK了。
③ 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語言,條件編譯問題,#if後邊加什麼類型的表達式;請看圖中#if後邊寫這樣的表達式為什麼會輸出#else
你好在c語言中#if後面需要跟一個整形的常數表達式,這個a不是一個常數,你需要定義成const int a=1;才可以。
⑤ C語言條件編譯程序問題
一般情況下,源程序中所有的行都參加編譯。但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是「條件編譯」(conditional compile)。條件編譯語句排版時,需考慮以下三種位置:
1)條件編譯語句塊與函數定義體之間不存在相互嵌套(主要在(.h)文件中);
2)條件編譯語句塊嵌套在函數體之外(主要在(.c)文件中);
3)條件編譯語句嵌套在函數體內 (主要在(.c)文件中)。條件編譯指令將決定哪些代碼被編譯,而哪些是不被編譯的。可根據表達式的值或某個特定宏是否被定義來確定編譯條件。
⑥ C語言中的條件編譯問題
簡單點說,尖括弧的意思是要包含的文件是系統的,會優先在系統的包含路徑中去找,典型的像
<stdio.h>。雙引號的意思是用戶自己的頭文件,所以先在用戶指定的目錄中去找,然後再去系統的路徑內去找,比如"my.h"。
默認的路徑,用戶的頭文件默認放在與源文件相同的目錄下,比如my.c所在的目錄,或者系統的工程文件目錄,這一點不同的系統可以會有不同的規定。而系統的頭文件一般放在編譯器的安裝目錄下,可能需要用編譯系統規定的語法進行指定,比如 -I=C:\XXX\INCLUDE;這個語句一般在集成的編譯環境中可以進行配置,如果配置不好,就可以會大量的出現某某頭文件找不到的情況,當然,編譯系統安裝的時候,一般都會配置好的,很少需要用戶特意進行配置。
結論,尖括弧與雙引號沒有本質的區別,可以全部用雙引號。如果是系統的頭文件,用尖括弧會稍微快一點。但對現在的計算機系統來說,快得這一點,很有限。
⑦ C語言 條件編譯問題
#include <stdio.h>
#include <stdlib.h>
#define CHANGE 0 //1表示翻譯,0表示不翻譯
int main(void)
{
char a[100];
int i;
char c;
printf("Please input the string\n");
for (i = 0; i < 100; i++)
{
scanf("%c", &a[i]);
if (a[i]== '\n')
{
a[i] = '\0';
break;
}
}
for (i = 0; i < 100;a[i] = c,i++)
{
#ifdef CHANGE 1
{
if(a[i]!= '\0')
{
c = a[i];
if (c == 'z')
{
c = 'a';
continue;
}
c = c -32;
}
else break;//你要加上跳出語句
}
//#else{};
#endif
}
printf("\n");
for (i = 0; i < 100; i++)
{
if (a[i]== '\0')
break;
printf("%c", a[i]);
}
system("pause");
return 0;
}
你調試看一下,當a[i]=='\0'的時候它i仍然在自加,根本就沒有跳出循環,所以後面出現的是亂碼,所以你要加上個break跳出語句!還有你的那個小寫轉換為大寫的時候不對,應該是減去32,大寫轉換為小寫的時候是加上32,理解了的話,別忘了加分哦!祝你好運!
⑧ C語言的一個關於條件編譯問題
上面的那個程序是把N當做一個預定義的參數,而你並沒有定義n,所以只會進入下面的分支。
下面的程序n是一個變數,是從外部輸入,當然可以根據輸入變化。
第一個可以改成,
#define n 0 // 小寫
#define n 1 // 大寫
這樣來選擇大小寫
⑨ 關於C語言條件編譯的問題
看來你對條件編譯的理解有點問題,條件編譯,顧名思義,是值在編譯的時候根據一定的條件來選擇編譯某一段或某幾段程序的。
而你要實現的功能似乎是想讓程序根據你的輸入來做不同的事情。這個時候程序已經編譯好了,跟條件編譯沒有任何關系。
要實現你的要求,可以這么做:
...
char T;
scanf("%c", &T);
...
while((c=str[i] )!= '\0')
{
if(T=='T')
{
...
}
else
{
...
}
}
或者:
#define LETTER T
...
while(...)
{
#if LETTER==T
...程序段1
#else
...程序段2
}
這樣,當你#define LETTER T 的時候,就只有程序段1被編譯了。
當你#define LETTER M或這其他的字元時,就只有程序段2被編譯了。
⑩ C語言預編譯,條件編譯問題
不可以。條件編譯的條件必須是在程序運行之前就知道值的,這樣才能把你的代碼根據情況編譯為不同的程序。這里的函數參數在運行前不知道值,因此無法使用條件編譯。