那么好了好了,宝子们,从今天开始开始总结暑假博客,今天的主角:程序环境和预处理,来吧开始整活!⛳️
在ANSI C的任何一种实现中,存在两个不同的环境。
第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。
编译本身也分为几个阶段:
看代码:
#include
//sum.c
int g_val = 2016;
void print(const char* str)
{
printf("%s\n", str);
}
//test.c
int main()
{
extern void print(char* str);
extern int g_val;
printf("%d\n", g_val);
print("hello bit.\n");
return 0;
}
#include
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
printf("%d ", i);
}
return 0;
}
VIM学习资料
简明VIM练级攻略:
简明VIM练级攻略链接:https://coolshell.cn/articles/5426.html
给程序员的VIM速查卡
给程序员的VIM速查卡:https://coolshell.cn/articles/5479.html
#define
#define 定义标识符:
#define MAX 1000
#define reg register //为 register这个关键字,创建一个简短的名字
#define do_forever for(;;) //用更形象的符号来替换一种实现
#define CASE break;case //在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ , \
__DATE__,__TIME__ )
在define定义标识符的时候,要不要在最后加上 ; ?
nononono
比如:
#define MAX 1000;//错误,不建议这样写
#define MAX 1000
提示:(只要对于宏定义的来说,多加括号就完事了,肯定不会出错。)
所有用于对数值表达式进行求值的宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中的操作符或邻近操作符之间不可预料的相互作用!
#define 替换规则:
在程序中扩展#define定义符号和宏时,需要涉及几个步骤。
注意:
一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者。 那我们平时的一个习惯是:
把宏名全部大写 函数名不要全部大写
#undef
这条指令用于移除一个宏定义。
#undef NAME
//如果现存的一个名字需要被重新定义,那么它的旧名字首先要被移除
许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。 例如:当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大写,我们需要一个数组能够大写。)
#include
int main()
{
int array [ARRAY_SIZE];
int i = 0;
for(i = 0; i< ARRAY_SIZE; i ++)
{
array[i] = i;
}
for(i = 0; i< ARRAY_SIZE; i ++)
{
printf("%d " ,array[i]);
}
printf("\n" );
return 0;
}
在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。
调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。
注: 推荐《高质量C/C++编程指南》中附录的考试试卷(很重要)。
笔试题:
好了,今天的分享就到这里了
如果对你有帮助,记得点赞+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!