當前位置:首頁 » 編程軟體 » 預編譯處理命令都必須以include開頭

預編譯處理命令都必須以include開頭

發布時間: 2022-05-27 21:22:56

c語言開頭為什麼用include 而不是別的詞

C語言中
#開頭的是預處理指令,不是C語句的一部分
#開頭的語句,在預處理階段,由預處理器處理,例如:
#include <stdio.h>
預處理器會將stdio.h文件的內容加入到當前文件的頭部,而
#define CONST 10
則會將文件中的CONST,用10代替(是直接代替)
預處理完畢後,才對文件進行編譯

當然你是可以用別的次開頭的,比如#define ,用include 開頭只是一種習慣,他可以放在需要使用包含在該文件中的內容之前。

❷ C語言中很多的預處理指令include、define等等它們各自的意義分別是什麼

include的作用: #include叫做「文件包含」 / include 語句包含並運行指定文件。 功能:它的功能是用來指定文件的全部內容替換程序中的命令行,從而使指定的文件與當前源文件連成一個源文件 書寫格式: #include <文件名> //表示編譯系統根據系統頭文件存放的目錄路徑去搜索系統頭文件,而不是在源文件目錄去查找 #include "文件名" //表示編譯系統首先在當前的源文件目錄中查找,若未找到才根據系統的頭文件存放的目錄路徑去搜索系統頭文件 //系統定義的頭文件通常使用尖括弧;用戶自定義的頭文件通常使用雙引號。 //一般來說,如果為調用庫函數而用#include命令來包含相關的頭文件,則用尖括弧,以節約查找時間。 //如果要包含的是用戶自己編寫的文件(這種文件一般都在用戶當前的目錄中),一般用雙撇號。 //若文件不在當前目錄中,在雙撇號內應該給出文件路徑(如#include"C:\wang\file2.h") ----------------- 1.#define 的作用 在C或C++語言源程序中允許用一個標識符來表示一個字元串,稱為「宏」。被定義為「宏」的標識符稱為「宏名」。在編譯預處理時,對程序中所有出現的「宏名」,都用宏定義中的字元串去代換,這稱為「宏代換」或「宏展開」。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。 在C或C++語言中,「宏」分為有參數和無參數兩種。 2. 無參宏定義 無參宏的宏名後不帶參數。 其定義的一般形式為: #define 標識符 字元串 其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。「define」為宏定義命令。「標識符」為所定義的宏名。「字元串」可以是常數、表達式、格式串等。 例如: #define M (a+b) 它的作用是指定標識符M來代替表達式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(a+b)表達式去置換所有的宏名M,然後再進行編譯。 程序1: #define M (a+b) main(){ int s,y; printf("input a number: "); scanf("%d",&y); s=M*M; printf("s=%d\n",s); } 上常式序中首先進行宏定義,定義M來替代表達式(a+b),在 s= M * M 中作了宏調用。在預處理時經宏展開後該語句變為: S=(a+b)*(a+b) 但要注意的是,在宏定義中表達式(a+b)兩邊的括弧不能少。否則會發生錯誤。 如當作以下定義後:#difine M (a)+(b) 在宏展開時將得到下述語句:S= (a)+(b)*(a)+(b) 對於宏定義還要說明以下幾點: 1. 宏定義是用宏名來表示一個字元串,在宏展開時又以該字元串取代宏名,這只是一種簡單的代換,字元串中可以含任何字元,可以是常數,也可以是表達式,預處理程序對它不作任何檢查。如有錯誤,只能在編譯已被宏展開後的源程序時發現。 2. 宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。 3. 宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。 3. 帶參宏定義 c語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。 帶參宏定義的一般形式為: #define 宏名(形參表) 字元串 在字元串中含有各個形參。 帶參宏調用的一般形式為: 宏名(形參表) 例如: #define M(y) ((y)*(y)+3*(y)) /*宏定義*/ .... k=M(5); /*宏調用*/ .... 在宏調用時,用實參5去代替形參y,經預處理宏展開後的語句為: k=5*5+3*5 程序2: #define MAX(a,b) (a>b)?a:b main(){ int x,y,max; printf("input two numbers: "); scanf("%d%d",&x,&y); max=MAX(x,y); printf("max=%d\n",max); } 上常式序的第一行進行帶參宏定義,用宏名MAX表示條件表達式(a>b)?a:b,形參a,b均出現在條件表達式中。程序第七行max=MAX(x,y)為宏調用,實參x,y,將代換形參a,b。宏展開後該語句為: max=(x>y)?x:y; 用於計算x,y中的大數。

❸ 預編譯命令行由什麼符號開頭

#include "stdio.h"
#define P 3
void *F(int x)/*定義一個無類型函數,它有返回值,只是返回的值是指向無類型數據的指針*/

void main(){printf("%d\n",(int)F(1+3));/*將無類型函數F返回的指針值通過(int)強制轉換為int型*/

還有幾個問題,
1.預處理命令行必須位於源文件的開頭是對是錯?為什麼?
對!
編譯器在編譯源代碼時都是從開頭到結尾依次讀取,自己定義的變數、宏等等都得放前面,這樣在編譯器在讀到它們時就作一個記錄;
在使用這些變數、宏時,編譯器會在記錄中去尋找,如果找不到就會報錯——此變數未被定義。

函數可以放在結尾(main()之後),但是必須在開頭作一個函數聲明(也叫函數原型)以使編譯器為它作記錄,以便以後使用它時可以在記錄中找到它。
函數也可以放在前面(main()之前),此時就不用再聲明了,編譯器在讀到它時也會作一個記錄。

總之,自己定義的東西都得先聲明後使用,否則使用時在記錄中會找不到它。

預處理命令也是自己定義的東西,同屬這一范疇。

2.為什麼在源文件的一行上不能有多條預處理命令?
每條C語句都有一個「;」作結尾,即使都放一行,編譯器都能分辨得出。
預處理命令並不以「#」作為結尾標記,放一行的話編譯器是無法分辨的,它會把此行作為一個語句處理

通常的語句最好都分行寫,否則程序量大時是不便排錯的。

3.若有下列說明和定義
union dt
date;
變數data所佔內存位元組數與成員c所佔位元組數相同,為什麼?

聯合體的長度是其最長成員(如double c)的長度。
聯合體在內存中的存儲形式:
聯合體所有成員a,b,c都是同一地址,也就是說他們共同佔用這一段內存。
以TC3.0為例,a占這一段內存的頭2個位元組,b占這一段內存的頭一個位元組,c占這一段內存的全部位元組(也就是頭4個位元組)

4.為什麼以下不對
char *sp;*sp="right!";
char s[10];s="right!";
一、進行字元串賦值時可以在定義時:直接在字元串定義後接「="right"」
如:char *sp="right";
或者 char s[10]="right";

二、也可以在非定義時,這時左值必須是左值必須是字元串指針變數。
如:sp="right!";
以下都是錯誤用法:
*sp="right!";//左值不是字元串指針變數
s="right!";//左值只是字元串指針 常量

1、如果說*a包含(x和\0),而*b包含(x和y),拿*a-*b會得出什麼結果,*a和*b都是char型變數的話

最終的表達式*a-*b中,a points to '\0',b points to 'y',so 表達式*a-*b代表的是'\0'-'y',結果是-121(y的ASCII是121)

point(char*p)
main()
{
char b[4]={'a','b','c','d'),*p=b;
point(p); printf("%c\n",*p);
}
A.a B.b C.c D.d
選哪個?為什麼?

選D,p最初是首地址b,然後p是b+3,此時*p相當*(b+3)、b[3].

2號問題:
main()
,,,},i,j;
for(i=0;i<4;i++)
{for (j=0;j<i,j++)
printf("%4c",' ');/*原題就是'和'之間只有個空格,我也不清楚是怎麼回事*/
for(j=__;j<4;j++)
printf(%4d",num[i][j]);
printf("\n");
}
}
printf("%4c",' '); 其中的' '其實是一個空格字元常量,這個同'a','b','c'等字元常量是一樣的。
這個語句中%4c是指要讀取一個字元(這個字元就是後面的空格字元常量' ')並輸出,這個字元在顯示器上應該佔4格。所以此句的功能是輸出4個空格(空格也是屬於字元)。
你改成printf("%4c",'a');printf("%4c",'b');試下,它是輸出3個空格和一個字元。
printf("%8c",' ');是輸出8個空格,這個比printf(" ");來實現輸出8個字元來得方便。

若要按下列形式輸出數組右上半三角(什麼玩意?)。
1 2 3 4 i=0,j=i,那麼j可以是0,1,2,3
6 7 8 i=1,j=i,那麼j可以是1,2,3
11 12 i=2,j=i,那麼j可以是2,3
16 i=3,j=i,那麼j可以是3
則下劃線處應填入的是?為什麼?(B)
A.i-1 B.i
C.i+1 D.4-i

3號問題:
程序中若有下列說明和定義語句:
char fun(char*);
main()
{
char *s="one",a[5]=,(*fl)()=fun,ch;
......
}
下列選項中對函數的正確調用語句是?為什麼?
A.(*fl)(a);
B.*fl(*s);
C.fun(&a);
D.ch=*fl( s);

選擇A,根據定義char fun(char*),形參必須是一個字元指針,"a","s"才是字元指針(char pointer),而"*s" is char variable,"&a" is invalid.所以排除B、C

只有fun、*fl才是函數入口地址.
B.*fl(*s);相當於*(fl(*s)),錯誤,指針運算符只能針對指針運算,fl(*s)得到的是int,不是指針,下同。故排除B、D.
D.*fl( s);相當於*(fl( s));

4號問題
#define S(x) 4*x*x+1
main()
{
int i=6,j=8;
printf("%d",S(i+j));
getchar();
}
這個函數的輸出結果是多少?怎麼得的?

得到81.
因為S(i+j)經過預編譯用i+j替換x後,它被展開為4*i+j*i+j+1。即(4*6+8*6+8+1)
你應該這樣改:
#define S(x) 4*(x)*(x)+1
或者 printf("%d",S((i+j)));即將i+j用括弧括起來(i+j),這樣就在替換時用(i+j)替換x

❹ C語言為什麼開頭都加;#include有什麼作用

#include<stdio.h>是引入C的庫函數,就比如寫一個HelloWorld,僅僅憑我們寫的這一句是不可能讓計算計算機輸出的,還需要要到C的庫函數,通俗講就是C為我們提供了很多已經實現好了的庫文件,只需要引述使用就可以了。

❺ C語言有效的預處理命令總是以什麼開頭

C語言中,所有預處理命令都是以「#」號開頭的。

C語言程序設計預處理的概念:在編譯之前進行的處理。 C語言的預處理主要有三個方面的內容:宏定義、文件包含、條件編譯。

(5)預編譯處理命令都必須以include開頭擴展閱讀:

1、宏定義:正確的宏定義是#defineS(r) ((r)*(r))

(1)宏名和參數的括弧間不能有空格

(2)宏替換只作替換,不做計算,不做表達式求解

(3)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存

(4)宏的啞實結合不存在類型,也沒有類型轉換。

(5)宏展開使源程序變長,函數調用不會

(6)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。

2、文件包含:格式:#include "文件名"或#include <文件名>;編譯時以包含處理以後的文件為編譯單位,被包含的文件是源文件的一部分。編譯以後只得到一個目標文件.obj,被包含的文件又被稱為「標題文件」或「頭部文件」、「頭文件」,並且常用.h作擴展名。

3、條件編譯

格式:

(1)#ifdef 標識符 程序段1 #else 程序段2 #endif 或#ifdef 程序段1 #endif;

(2)#ifndef標識符 #define 標識1 程序段1 #endif;

(3)#if表達式1 程序段1 #elif 表達式2 程序段2 …… #elif 表達式n 程序段n #else 程序段n+1 #endif。

使用條件編譯可以使目標程序變小,運行時間變短。

❻ 預處理指令只能位於C源程序文件的首部嗎 為什麼

是。

預處理命令是以「#」號開頭的命令,它們不是C語言的可執行命令,這些命令應該在函數之外書寫,一般在源文件的最前面書寫,稱為預處理部分。

在C編譯系統編譯源程序之前,先要對源程序中的預處理命令進行處理,處理完畢之後才能對源程序進行編譯。在全屏幕編輯環境下,預處理是在編譯之前自動由系統處理的。 因為大多數程序都用這個printf函數,而這個函數的頭文件是「stdio.h」,所以一般要包括上。

(6)預編譯處理命令都必須以include開頭擴展閱讀:

預處理是C語言的一個重要功能,它由預處理程序負責完成。當對一個源文件進行編譯時,系統將自動引用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。

C語言提供多種預處理功能,主要處理#開始的預編譯指令,如宏定義(#define)、文件包含(#include)、條件編譯(#ifdef)等。合理使用預處理功能編寫的程序便於閱讀、修改、移植和調試,也有利於模塊化程序設計。

❼ C語言中,為什麼調用數學函數庫中的函數必須在程序開頭加一條#include指令,把頭文件「math

那個#include 的意思就是包含的意思,這個語句是c編譯軟體的預處理語句,本身不是c語言的語法。也就是提供給編譯器在生成最終應用程序之前用的。比如#include 「math.h」 就是把math.h 這個文件里的內容簡單的復制到當前位置來,裡面有定義好的關於數學運算的函數之類的,而函數是必須要先定義,後使用。所以如果你要用數學函數,那麼就要先定義,而math.h裡面就是為我們定義好了的一些列函數,簡單包含進來,就相當於一次性全部定義了可能要使用的所有函數,這樣你就可以直接用裡面定義的函數名直接調用那些功能了。而如果你不包含那個,也可以自己定義一些列的數學函數,按順序寫在開始的地方,之後再調用。效果是一樣的。記住嘛,#include的意思就是簡單的復制後面制定的文件內容到當前位置。不知道你懂沒有。

❽ 初學c語言時,輸入程序後運行,是執行還是預編譯預編譯是什麼為什麼最開始要有#include如

預編譯是把一個工程中較穩定的代碼預先編譯好放在一個文件里.這些預先編譯好的代碼可以是任何的C/C++代碼。而輸入程序後的運行,只是將代碼編譯成了obj(object)文件,所有obj文件經鏈接(link)成為可執行文件。而你說的執行,應該就是點擊最後生成的.exe文件了。開始要有的#include,是表明要包含的頭文件,或者其它的保存的代碼文件。只有這樣,你才可以引用到那個文件中的代碼,來供目前的文件來使用。
至於你說的什麼大型游戲的編程,應該也是這樣的一套,因為C語言就是上述生成文件的套路。游戲的編程,初學的話可以建議看《游戲編程入門》( 美 哈本),這本書基於windows平台,是為幾乎沒有游戲開發經驗的初學者寫的,循序漸進,從2D講到3D 的一些基本技術,其中的例子也非常經典,看完書基本就可以做出不錯的2D 游戲了,也有了一定的3D基礎了,之後再看一些深入的書籍像《Windows游戲編程大師技巧》。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:645
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:936
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:632
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:821
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:731
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1066
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:299
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:160
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:852
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:763