编译的进程没有行号
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语言编译执行的全过程是怎样的
不明白楼主什么意思,就是先把你的代码转为汇编代码,然后转为二进制文件,读入内存执行。