當前位置:首頁 » 編程軟體 » 編譯的進程沒有行號

編譯的進程沒有行號

發布時間: 2022-09-19 11:59:07

1. 怎樣在 Markdown 中使程序代碼帶上行號

在圖靈社區使用 Markdown 寫文章時,如果在一段文字的每行開頭加上四個空格,或者一個製表符(Tab),這段文字就會被視為程序代碼。這樣,就會自動識別所用的編程語言,進行代碼染色,語法高亮顯示。但是,如果這段程序很長的話,就有兩個小問題:

每行的開頭要加上空格或製表符,很麻煩。
如果要顯示行號的話,就更麻煩了。
因此,我用 C# 語言寫了小程序,建設一個 ASP.NET 4 網站來解決上述兩個麻煩:

[+]查看原圖

在這個網頁中:

Line Count 復選框表示是否需要加上行號。
Prefix 中的的 Space 和 Tab 無線按鈕讓你選擇每行開頭是增加空格還是製表符。
Prefix Count 文本框讓你輸入縮進的層次。默認是縮進一層 。但是如果遇到在有序列表或無序列表中的程序代碼,就需要縮進兩層,甚至更多層了。
這個網站的總體結構如下所示:

網站的配置文件 Web.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
網站的 Web 頁面文件 CodeFormat.aspx 如下所示:

<%@ Page validateRequest="false" Language="C#" inherits="Skyiv.Ben.Web.CodeFormatPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http //www w3 org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http //www w3 org/1999/xhtml" >
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Code Format</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button Onclick="Submit" Text="Submit" Runat="Server" />
<span style="background-color:LightBlue;">
<asp:CheckBox Id="chkLineCount" Text="Line Count" Checked="True" Runat="Server" />

</span>

<span style="background-color:LightBlue;">
Prefix:
<asp:RadioButton Id="rbnSpace" Text="Space" Checked="True"
GroupName="Prefix" Runat="Server" />
<asp:RadioButton Id="rbnTab" Text="Tab"
GroupName="Prefix" Runat="Server" />

</span>

<span style="background-color:LightBlue;">
Prefix Count:
<asp:TextBox Runat="Server" Id="tbxLevel" Text="1" Columns="2" MaxLength="1" />

</span>
<hr />
<div>
<asp:TextBox Runat="Server" Id="tbxInput" Wrap="False"
TextMode="MultiLine" Columns="80" Rows="10" />
<br />
<asp:TextBox Runat="Server" Id="tbxOutput" ReadOnly="True" Wrap="False"
TextMode="MultiLine" BackColor="LightBlue" Columns="80" Rows="10" />
</div>
</form>
</body>
</html>
以及對應的後台 C# 代碼 CodeFormat.aspx.cs:

1: using System;
2: using System.IO;
3: using System.Web;
4: using System.Web.UI;
5: using System.Web.UI.WebControls;
6: using Skyiv.Utils;
7:
8: namespace Skyiv.Ben.Web
9: {
10: public class CodeFormatPage : Page
11: {
12: protected TextBox tbxInput;
13: protected TextBox tbxOutput;
14: protected TextBox tbxLevel;
15: protected CheckBox chkLineCount;
16: protected RadioButton rbnTab;
17:
18: protected void Page_Load(object sender, EventArgs e)
19: {
20: tbxOutput.Text = string.Format(" OS: {1} ({2}-bit){0}CLR: {3}",
21: Environment.NewLine, Environment.OSVersion,
22: Environment.Is64BitOperatingSystem ? 64 : 32,
23: Environment.Version);
24: }
25:
26: protected void Submit(object sender, EventArgs e)
27: {
28: var writer = new StringWriter();
29: new CodeFormat(new StringReader(tbxInput.Text),
30: writer).Run(chkLineCount.Checked, rbnTab.Checked, GetLevel(tbxLevel.Text));
31: tbxOutput.Text = writer.ToString();
32: }
33:
34: int GetLevel(string str)
35: {
36: int n;
37: if (!int.TryParse(str, out n)) n = 1;
38: return Math.Min(5, Math.Max(0, n));
39: }
40: }
41: }
上述程序中:

第 34 至 39 行的 GetLevel 方法讀取 Prefix Count 文本框中的縮進層次,返回結果限制在 0 到 5 之間。
第 26 至 32 行的 Submit 方法在 Web 頁面中的 Submit 按鈕被點擊時被調用。
第 29 至 30 行調用 CodeFormat 類的 Run 方法對程序代碼進行格式化(加行號、行首空格等)。
下面就是 CodeFormat 類的源程序代碼 CodeFormat.cs:

1: using System;
2: using System.IO;
3: using System.Collections.Generic;
4:
5: namespace Skyiv.Utils
6: {
7: sealed class CodeFormat
8: {
9: TextReader reader;
10: TextWriter writer;
11:
12: public CodeFormat(TextReader reader, TextWriter writer)
13: {
14: this.reader = reader;
15: this.writer = writer;
16: }
17:
18: public void Run(bool hasCount, bool isTab, int level)
19: {
20: Write(Read(), hasCount, isTab, level);
21: }
22:
23: List<string> Read()
24: {
25: var lines = new List<string>();
26: for (string s; (s = reader.ReadLine()) != null; ) lines.Add(s);
27: return lines;
28: }
29:
30: void Write(List<string> lines, bool hasCount, bool isTab, int level)
31: {
32: var prefix = "".PadLeft((isTab ? 1 : 4) * level, isTab ? '\t' : ' ');
33: var format = "{0}" + (hasCount ? "{1," +
34: lines.Count.ToString().Length + "}: " : "") + "{2}";
35: var count = 0;
36: foreach (var line in lines)
37: writer.WriteLine(format, prefix, ++count, line);
38: }
39: }
40: }
上述程序中:

第 9 至 10 行的 TextReader 和 TextWriter 分別用於讀取數據和輸出格式化後的結果,這兩個類是抽象基類。
在這個網站中,是使用 StringReader 和 StringWriter 派生類,對應於 Web 頁面的 tbxInput 和 tbxOutput 文本框。
如果使用 StreamReader 和 StreamWriter 派生類,就可以從輸入流讀取數據,寫到輸出流中。
如果使用 Console.In 和 Console.Out,就可以從標准輸入讀取數據,寫到標准輸出。
第 23 至 28 行的 Read 方法讀取數據到內存的 List<string> 數據結構中。
第 30 至 38 行的 Writer 方法將內存中的數據格式化後寫出去。
第 32 行根據 isTab 和 level 參數決定程序代碼數據每行的前綴。
第 33 至 34 行根據 hasCount 參數決定行號的內容。
第 34 行的 lines.Count.ToString().Length 是行號所佔的寬度。
第 36 至 37 行的循環逐行格式化數據。
最後是 Makefile:

CSC = dmcs
DLL1 = -r:System.Web.dll

../bin/CodeFormat.dll: CodeFormat.aspx.cs CodeFormat.cs
$(CSC) -out:$@ -t:library $(DLL1) CodeFormat.aspx.cs CodeFormat.cs
有了上面的源程序後,執行 make 命令編譯整個網站:

src$ make
dmcs -out:../bin/CodeFormat.dll -t:library -r:System.Web.dll CodeFormat.aspx.cs CodeFormat.cs

這就大功告成了。

2. excel按行數分頁宏,今天突然不能用了,編譯都沒過缺行號標簽語句,求幫看看

把這兩個注釋前分別加個單引號
/*根據*/

/*根據某一行分類*/
程序編譯沒問題

3. 使用編程軟體VC++2008寫程序時,為什麼前面的序號沒有顯示出來!如下面兩張圖片,第二張就有序號

點擊菜單工具->選項,然後如下圖進行設置(截圖的是VS2013,VS2008類似):

4. c語言程序,給源程序添加行號

#include<stdio.h>

void main(void)
{
FILE *fpIn; // 輸入文件的指針

FILE *fpOut; // 輸出文件的指針

char str[120]; // 用來存儲從文件中讀取出的」一行「字元串信息

int row = 1;

fpIn = fopen("data5612.cpp", "r"); // 以只讀和文本格式打開data5612.cpp,這里的文件名無所謂大小寫

fpOut = fopen("data5612.txt", "w"); // 以創建方式(也叫寫方式)打開data5612.txt文件

fgets(str, 81, fpIn); // 從文件中讀取一行信息,保存到str數組中。這里要注意的是這個81,一般情況下,編寫文本格式文件的人,都習慣遇到行尾就敲回車,所以,一般情況下,文本文件一行最多80個字元。如果,一行不夠80個字元,這個函數會自動只讀到'\n'就結束了。
while(!feof(fpIn)) // 判斷上一次fgets()是否正常(即,沒有遇到文件尾部)

{

fprintf(fpOut, "%04d %s\n", row, str); // 在讀入的每一行信息前,加入0000到9999的行號(應該夠用了吧),呵呵呵呵

row++; // 行號加一

fgets(str, 81, fpIn); // 讀取下一行

}

fclose(fpIn); // 關閉文件

fclose(fpOut);

}

程序已驗證,木有問題。

5. 日誌中異常顯示沒有具體行號怎麼辦

(Unknown Source) 是因為這些類的class文件沒有帶行號表等調試信息,
如果這些類是你自己寫的, 那麼在編譯時帶上行號表就可以了
在Eclipse中設置:
菜單->Project->Properties..->Java Compiler->Classfile Generration下的前三項選中

6. 怎樣在 Markdown 中使程序代碼帶上行號

用 Markdown 寫文章時,如果在一段文字的每行開頭加上四個空格,或者一個製表符(Tab),這段文字就會被視為程序代碼。這樣,就會自動識別所用的編程語言,進行代碼染色,語法高亮顯示。但是,如果這段程序很長的話,就有兩個小問題:

每行的開頭要加上空格或製表符,很麻煩。
如果要顯示行號的話,就更麻煩了。
因此,我用 C# 語言寫了小程序,建設一個 ASP.NET 4 網站來解決上述兩個麻煩:

[+]查看原圖

在這個網頁中:

Line Count 復選框表示是否需要加上行號。
Prefix 中的的 Space 和 Tab 無線按鈕讓你選擇每行開頭是增加空格還是製表符。
Prefix Count 文本框讓你輸入縮進的層次。默認是縮進一層 。但是如果遇到在有序列表或無序列表中的程序代碼,就需要縮進兩層,甚至更多層了。
這個網站的總體結構如下所示:

網站的配置文件 Web.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
網站的 Web 頁面文件 CodeFormat.aspx 如下所示:

<%@ Page validateRequest="false" Language="C#" inherits="Skyiv.Ben.Web.CodeFormatPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http //www w3 org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http //www w3 org/1999/xhtml" >
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Code Format</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button Onclick="Submit" Text="Submit" Runat="Server" />
<span style="background-color:LightBlue;">
<asp:CheckBox Id="chkLineCount" Text="Line Count" Checked="True" Runat="Server" />

</span>

<span style="background-color:LightBlue;">
Prefix:
<asp:RadioButton Id="rbnSpace" Text="Space" Checked="True"
GroupName="Prefix" Runat="Server" />
<asp:RadioButton Id="rbnTab" Text="Tab"
GroupName="Prefix" Runat="Server" />

</span>

<span style="background-color:LightBlue;">
Prefix Count:
<asp:TextBox Runat="Server" Id="tbxLevel" Text="1" Columns="2" MaxLength="1" />

</span>
<hr />
<div>
<asp:TextBox Runat="Server" Id="tbxInput" Wrap="False"
TextMode="MultiLine" Columns="80" Rows="10" />
<br />
<asp:TextBox Runat="Server" Id="tbxOutput" ReadOnly="True" Wrap="False"
TextMode="MultiLine" BackColor="LightBlue" Columns="80" Rows="10" />
</div>
</form>
</body>
</html>
以及對應的後台 C# 代碼 CodeFormat.aspx.cs:

1: using System;
2: using System.IO;
3: using System.Web;
4: using System.Web.UI;
5: using System.Web.UI.WebControls;
6: using Skyiv.Utils;
7:
8: namespace Skyiv.Ben.Web
9: {
10: public class CodeFormatPage : Page
11: {
12: protected TextBox tbxInput;
13: protected TextBox tbxOutput;
14: protected TextBox tbxLevel;
15: protected CheckBox chkLineCount;
16: protected RadioButton rbnTab;
17:
18: protected void Page_Load(object sender, EventArgs e)
19: {
20: tbxOutput.Text = string.Format(" OS: {1} ({2}-bit){0}CLR: {3}",
21: Environment.NewLine, Environment.OSVersion,
22: Environment.Is64BitOperatingSystem ? 64 : 32,
23: Environment.Version);
24: }
25:
26: protected void Submit(object sender, EventArgs e)
27: {
28: var writer = new StringWriter();
29: new CodeFormat(new StringReader(tbxInput.Text),
30: writer).Run(chkLineCount.Checked, rbnTab.Checked, GetLevel(tbxLevel.Text));
31: tbxOutput.Text = writer.ToString();
32: }
33:
34: int GetLevel(string str)
35: {
36: int n;
37: if (!int.TryParse(str, out n)) n = 1;
38: return Math.Min(5, Math.Max(0, n));
39: }
40: }
41: }
上述程序中:

第 34 至 39 行的 GetLevel 方法讀取 Prefix Count 文本框中的縮進層次,返回結果限制在 0 到 5 之間。
第 26 至 32 行的 Submit 方法在 Web 頁面中的 Submit 按鈕被點擊時被調用。
第 29 至 30 行調用 CodeFormat 類的 Run 方法對程序代碼進行格式化(加行號、行首空格等)。
下面就是 CodeFormat 類的源程序代碼 CodeFormat.cs:

1: using System;
2: using System.IO;
3: using System.Collections.Generic;
4:
5: namespace Skyiv.Utils
6: {
7: sealed class CodeFormat
8: {
9: TextReader reader;
10: TextWriter writer;
11:
12: public CodeFormat(TextReader reader, TextWriter writer)
13: {
14: this.reader = reader;
15: this.writer = writer;
16: }
17:
18: public void Run(bool hasCount, bool isTab, int level)
19: {
20: Write(Read(), hasCount, isTab, level);
21: }
22:
23: List<string> Read()
24: {
25: var lines = new List<string>();
26: for (string s; (s = reader.ReadLine()) != null; ) lines.Add(s);
27: return lines;
28: }
29:
30: void Write(List<string> lines, bool hasCount, bool isTab, int level)
31: {
32: var prefix = "".PadLeft((isTab ? 1 : 4) * level, isTab ? '\t' : ' ');
33: var format = "{0}" + (hasCount ? "{1," +
34: lines.Count.ToString().Length + "}: " : "") + "{2}";
35: var count = 0;
36: foreach (var line in lines)
37: writer.WriteLine(format, prefix, ++count, line);
38: }
39: }
40: }
上述程序中:

第 9 至 10 行的 TextReader 和 TextWriter 分別用於讀取數據和輸出格式化後的結果,這兩個類是抽象基類。
在這個網站中,是使用 StringReader 和 StringWriter 派生類,對應於 Web 頁面的 tbxInput 和 tbxOutput 文本框。
如果使用 StreamReader 和 StreamWriter 派生類,就可以從輸入流讀取數據,寫到輸出流中。
如果使用 Console.In 和 Console.Out,就可以從標准輸入讀取數據,寫到標准輸出。
第 23 至 28 行的 Read 方法讀取數據到內存的 List<string> 數據結構中。
第 30 至 38 行的 Writer 方法將內存中的數據格式化後寫出去。
第 32 行根據 isTab 和 level 參數決定程序代碼數據每行的前綴。
第 33 至 34 行根據 hasCount 參數決定行號的內容。
第 34 行的 lines.Count.ToString().Length 是行號所佔的寬度。
第 36 至 37 行的循環逐行格式化數據。
最後是 Makefile:

CSC = dmcs
DLL1 = -r:System.Web.dll

../bin/CodeFormat.dll: CodeFormat.aspx.cs CodeFormat.cs
$(CSC) -out:$@ -t:library $(DLL1) CodeFormat.aspx.cs CodeFormat.cs
有了上面的源程序後,執行 make 命令編譯整個網站:

src$ make
dmcs -out:../bin/CodeFormat.dll -t:library -r:System.Web.dll CodeFormat.aspx.cs CodeFormat.cs

這就大功告成了。

7. 新手在學習c語言並編譯程序時編譯錯誤怎麼辦

1、確定出錯的行號
如果是一個比較好的集成編譯環境的話,一般雙擊編譯錯誤,滑鼠都會自動跳轉到該行並高亮顯示。
沒有這個功能也沒關系,編譯錯誤裡面也都會有說明某某.c,某某行出的問題
1>e:\visual studio 2005\projects\airplane\airplane\airplane.cpp(52) : error C2065: 'abc' : undeclared identifier
這個就是說明在airplane.cpp的52行有錯誤

2、多個錯誤的話,一般只處理第一個錯誤
如果一次打出很多錯誤的話,不需要每一個都處理,只處理第一個編譯錯誤,然後再次編譯。大部分的時候,都是由於第一個錯誤產生了後續很多錯誤,第一個錯誤解決之後,其他錯誤也就迎刃而解。

3、對錯誤的更改
一般就是看錯誤的編號和後續的英文說明,如上面的錯誤,錯誤編號是C2065,錯誤的解釋是'abc' : undeclared identifier,未定義的標示符,將abc定義即可。
錯誤的種類很多,一般看英文就可以解決,如果解決不了的話,推薦根據錯誤編號上網搜索一下解決方法就OK拉。

8. 預處理類型

1. 預處理程序

按照ANSI標準的定義,預處理程序應該處理以下指令:

#if #ifdef #ifndef #else #elif

#endif

#define

#undef

#line

#error

#pragma

#include

顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。

2. #define

#define指令定義一個標識符和一個串(也就是字元集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:

#define macro-name char-sequence

這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。

例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:

#define LEFT 1

#define RIGHT 0

每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。

定義一個宏名字之後,可以在其他宏定義中使用,例如:

#define ONE 1

#define TWO ONE+ONE

#define THREE ONE+TWO

宏代換就是用相關的串替代標識符。因此,如果希望定義一條標准錯誤信息時,可以如下定義:

#define ERROR_MS 「Standard error on input \n」

如果一個串長於一行,可在行尾用反斜線」\」續行,如下:

#define LONG_STRING 「This is a very very long \

String that is used as an example」

3. #error

#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:

#error error-message

注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。

4. #include

程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(「」)或一對尖括弧(<>)包圍,例如:

#include 「stdio.h」

#include 都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。

包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。

文件名被雙括弧或尖括弧包圍決定了對指定文件的搜索方式。文件名被尖括弧包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括弧包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括弧包圍時的辦法重新搜索一次。

通常,絕大多數程序員使用尖括弧包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。

5. 條件編譯指令

若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。

5.1#if、#else、#elif #endif

條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。

#if的一般形式是:

#if constant-expression

Statement sequence

#endif

如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。

#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:

#include #define MAX 100

Int main(void)

{
#if MAX>99

printf(「Compiled for array greater than 99.\n」);

#else

printf(「Complied for small array.\n」);

#endif

return 0;

}

注意,#else既是標記#if塊的結束,也標記#else塊的開始。因為每個#if只能寫一個#endif匹配。

#elif指令的意思是「否則,如果」,為多重編譯選擇建立一條if-else-if(如果-否則-如果鏈)。如果#if表達式為真,該代碼塊被編譯,不測試其他#elif表達式。否則,序列中的下一塊被測試,如果成功則編譯之。一般形式如下:

#if expression

Statement sequence

#elif expression1

Statement sequence

#elif expression2

Statement sequence

.

.

.

#elif expression

Statement sequence

#endif

5.2#ifdef和#ifndef

條件編譯的另一個方法是使用編譯指令#ifdef和#ifndef,分別表示「如果已定義」和「如果未定義」。#ifdef的一般形式如下:

#ifdef macro-name

Statement sequence

#endif

如果macro-name原先已經被一個#define語句定義,則編譯其中的代碼塊。

#ifndef的一般形式是:

#ifndef macro-name

Statement sequence

#endif

如果macro-name當前未被#define語句定義,則編譯其中的代碼塊。

我認為,用這種,可以很方便的開啟/關閉整個程序的某項特定功能。

#ifdef和#ifndef都可以使用#else或#elif語句。

#inlucde #define T 10

Int main(void)

{
#ifdef t

Printf(「Hi T\n」);

#else

Printf(「Hi anyone\n」);

#endif

#ifndef M

Printf(「M Not Defined\n」);

#endif

Return 0;

}

6. #undef

#undef指令刪除前面定義的宏名字。也就是說,它「不定義」宏。一般形式為:

#undef macro-name

7. 使用defined

除#ifdef之外,還有另外一種確定是否定義宏名字的方法,即可以將#if指令與defined編譯時操作符一起使用。defined操作符的一般形式如下:

defined macro-name

如果macro-name是當前定義的,則表達式為真,否則為假。

例如,確定宏MY是否定義,可以使用下列兩種預處理命令之一:

#if defined MY



#ifdef MY

也可以在defined之前加上感嘆號」!」來反轉相應的條件。例如,只有在DEBUG未定義的情況下才編譯。

#if !defined DEBUG

Printf(「Final Version!\n」);

#endif

使用defined的一個原因是,它允許由#elif語句確定的宏名字存在。

8. #line

#line指令改變__LINE__和__FILE__的內容。__LINE__和__FILE__都是編譯程序中預定義的標識符。標識符__LINE__的內容是當前被編譯代碼行的行號,__FILE__的內容是當前被編譯源文件的文件名。#line的一般形式是:

#line number 「filename」

其中,number是正整數並變成__LINE__的新值;可選的「filename」是合法文件標識符並變成__FILE__的新值。#line主要用於調試和特殊應用。

9. #pragma

#pragma是編譯程序實現時定義的指令,它允許由此向編譯程序傳入各種指令。例如,一個編譯程序可能具有支持跟蹤程序執行的選項,此時可以用#pragma語句選擇該功能。編譯程序忽略其不支持的#pragma選項。#pragma提高C源程序對編譯程序的可移植性。

10. 預處理操作符#和##

有兩個預處理操作符:#和##,它們可以在#define中使用。

操作符#通常稱為字元串化的操作符,它把其後的串變成用雙引號包圍的串。例如:

#include #define mkstr(s) #s

int main(void)

{
Printf(mkstr(I like C));

Return 0;

}

預處理程序把以下的語句:

Printf(mkstr(I like C));

變成

Printf(「I like C」);

操作符##把兩個標記拼在一起,形成一個新標記。例如:

#include #define concat(a,a) a##b

int main(void)

{
Int xy = 10;

Printf(「%d」,concat(x,y));

Return 0;

}

預處理程序把以下語句:

Printf(「%d」,concat(x,y));

變成

Printf(「%d」,xy);

操作符#和##主要作用是允許預處理程序對付某些特殊情況,多數程序中並不需要。

11. 預定義宏

C規范了5個固有的預定義宏,它們是:

__LINE__

__FILE__

__DATE__

__TIME__

__STDC__

__LINE__和__FILE__包含正在編譯的程序的行號和文件名。

__DATE__和內容形如month/day/year(月/日/年)的串,代表源文件翻譯成目標碼的日期。

__TIME__中的串代表源代碼編譯成目標碼的時間,形如hour:minute:second(時:分:秒)

如果__STDC__的內容是十進制常數1,則表示編譯程序的實現符合標准C。

9. 用WINAVR+AVR Studio 編譯AVR程序,請問怎麼設置顯示行號,就像KEIL C51裡面的每行程序前面都有行號

我是使用winavr自帶的IDE環境寫avr的程序的。已經很好用了。在自導的IDE中,默認顯示行號。

10. C語言編譯執行的全過程是怎樣的

不明白樓主什麼意思,就是先把你的代碼轉為匯編代碼,然後轉為二進制文件,讀入內存執行。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:618
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:345
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:60
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:287
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:780
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:332
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:194
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:783
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:347
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:576