
1.2.1.3 编译和运行
【例1.1】以下程序预期实现“计算数组a中所有元素和”的功能。
1 #define N 5 2 int Add(int a[], int n); 3 int main(void) 4 { 5 int a[N] = {5,4,3,2,1}; 6 sum = Add(a, N); 7 printf("sum =%d\n", sum); 8 return 0; 9 } 10 int Add(int a[], int n) 11 { 12 int sum; 13 for (int i=0; i<n; i++) 14 { 15 sum -= a[i]; 16 } 17 return sum; 18 }
将这个示例代码输入test.c文件中,然后单击选择菜单栏中的<生成>选项卡→<编译>选项进行编译或按组合键Ctrl+F7,开始编译源程序。如果修改了程序且希望重新编译整个项目的所有源代码,也可以单击选择菜单栏中的<生成>选项卡→<重新生成解决方案>选项,如图1-17所示。

图1-17 编译程序
完成程序编译后,在VS 2022的输出窗口内显示图1-18所示的编译错误和警告信息。

图1-18 程序编译时在输出窗口显示编译错误和警告信息
在错误列表窗口中的消息区内显示了所有错误和警告信息及其发生的位置与可能的原因。双击错误提示信息,光标会立即跳转到发生错误的代码行。
错误列表第1行的警告信息提示第6行的变量sum是一个未定义的标识符,在第6行的变量sum前加上变量类型声明,即修改为
int sum = Add(a, N);
其实,将鼠标指针放到显示(红色)波浪线的标识符sum上,也能显示标识符sum未定义的提示信息,如图1-19所示。

图1-19 在代码上显示错误提示信息
错误列表第 3 行的错误信息提示 printf 是一个未定义的标识符,在代码首行前插入一行“#include<stdio.h>”。此时,重新编译程序,在VS 2022的输出窗口内显示图1-20所示的编译错误和警告信息。

图1-20 在VS 2022的输出窗口内显示编译错误和警告信息
错误列表第1行的警告信息显示第18行使用了未初始化的内存sum,第2行的错误信息显示第16行使用了未初始化的局部变量sum。此时,还可以看到第18行的行标号位置有个小的灯泡提示符,将鼠标轻轻放到其上面,可以出现一个快速操作提示,如图1-21所示。
单击这个小灯泡,可以出现图1-22所示的提示信息,提示第13行的变量定义语句中的变量sum未初始化。

图1-21 在代码上显示快速操作提示

图1-22 在代码上显示的快速操作提示信息内容
将第13行语句修改为
int sum = 0;
后,重新编译程序,此时在VS 2022的输出窗口会显示图1-23所示的编译成功信息。

图1-23 编译成功时的VS 2022输出窗口内容
单击工具栏中的<本地Windows调试器>按钮或按组合键Ctrl+F5,即可运行程序。运行后,会出现一个黑色的控制台窗口,在窗口中显示程序运行结果,如图1-24所示。

图1-24 显示程序运行结果
注意:由于scanf()不能限制输入字符串的长度,因此VS 2022将其视为不安全的函数,改用能限制输入字符串长度的scanf_s()来输入数据,但是scanf_s()并不是标准C提供的函数,只能在VS 2022中使用。因此,若要在VS 2022中继续使用scanf(),则只需在源文件的第一行加上下面的宏定义即可。
#define _CRT_SECURE_NO_WARNINGS 1