ANSI表征对C语言所作的最明显的修改是函数声明与函数定义这两个方面。当然,这也只能从宏观上讲解其中的奥妙。
在这里使用了getline函数
int getline(char s[],int lim)
{
int c,i;
i=0;
while(--lim>0&&(c=getchar())!=EOF&&c!='\n')
s[i++]=c;
if(c=='\n')
s[i++]=c;
s[i]='\0';
return i;
}
在这个函数中就保证了字符数组的大小比字符串长度小1。
int strindex(char s[],char t[])
{
int i,j,k;
for(i=0;s[i]!='\0';i++){
for(j=i,k=0;s[i]!='\0'&&s[j]==t[k];j++,k++);
if(k>0&&t[k]=='\0')
return i;
}
return -1;
}
总感觉还是大师的函数定义规范完整,尽管这个函数很小
程序可以看成是变量定义和函数定义的集合。函数之间的通信可以通过参数、函数返回值以及外部变量进行。
在一个源程序的所有源文件中,一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern声明来访问它(定义外部变量的源文件中也可以对该外部变量的extern声明)。外部变量的定义必须指定数组的长度,但extern声明则不一定要指定数组的长度。
外部变量的初始化只能出现在其定义中。
用static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分。
要将对象指定为静态存储,可以在正常的对象声明之前加上关键字static作为前缀。
外部的static声明通常多用于变量,当然,它也可用于声明函数。通常情况下,函数名字是全局可访问的,对整个程序的各个部分而言都可见。但是,如果把函数声明为static类型,则该函数名处理对该函数声明所在的文件可见外,其他文件都无法访问。
static也可用于声明内部变量。static类型的内部变量同自动变量一样,是某个特定函数的局部变量,只能在该函数中使用,但它与自动变量不同的是,不管其所在函数是够被调用,它一直存在,而不像自动变量那样,随着所在函数别调用和退出而存在和消失。static类型的内部变量时一种只能在某个特定函数中使用但一直占据存储空间的变量。关于这个问题,可参考这篇文章。
其实关于static的使用也就那么三点,修饰函数;修饰变量(但在某个.c文件的全局变量,也就是在这个.c文件的所有函数之外的变量);修饰变量(但是修饰的是函数体内的变量)。
在不进行显示初始化的情况下,外部变量(也就是全局变量呗)和静态变量都将被初始化为0,而自动变量和寄存器变量的初值没有定义。
条件包含的部分内容:
#if 语句对其中的常量整型表达式(其中不能包含sizeof、类型转换运算符或enum常量)进行求值,若该表达式的值不等于0,则包含其后的各行,直到遇到#endif、#elif或者#else语句为止(预处理器语句#elif类似于else if)。关于头文件被包含一次的内容可以参考这篇文章