非常教程

C参考手册

C 语法

Main function

每个C程序编码在托管执行环境中运行都包含被调用函数的定义(不是原型),该函数main是程序的指定开始。

int main (void) { body }

(1)

int main (int argc, char *argv[]) { body }

(2)

int main (int argc, char *argv[] , other_parameters ) { body }

(3)

/* another implementation-defined signature */

(4)

参数

ARGC

-

非负值,表示从运行程序的环境传递给程序的参数数量。

ARGV

-

指向由空字符结尾的多字节字符串组成的指针数组,这些字符串表示从执行环境(argv0到argvargc-1)传递给程序的参数。argvargc的值保证为0。

body

-

主要功能的主体

other_parameters

-

实现可能允许主函数的其他形式。一个非常常见的扩展是传递char * []类型的第三个参数,指向执行环境变量的指针数组。

名称argcargv是任意的,以及参数类型的表示:int main(int ac, char** av)是同样有效。

返回值

如果使用return语句,则返回值将用作隐式调用的参数exit()(请参阅下面的详细信息)。值为零并EXIT_SUCCESS表示终止成功,该值EXIT_FAILURE表示不成功终止。

说明

main在所有具有静态存储持续时间的对象被初始化之后,程序启动时会调用该函数。它是在托管环境(即操作系统)中执行的程序的指定入口点。任何独立程序(引导加载程序,操作系统内核等)的入口点的名称和类型都是实现定义的。

主函数的双参数形式的参数允许从执行环境传递任意多字节字符串(这些通常称为命令行参数)。指针argv[1] .. argv[argc-1]指向每个字符串中的第一个字符。argv[0]是一个指向空字符结尾多字节字符串的初始字符的指针,它表示用于调用程序本身的名称(或者,如果执行环境不支持它,argv0保证为零)。

如果执行环境无法区分大写字母和小写字母,则命令行参数会转换为小写字母。

这些字符串是可修改的,任何修改都会一直存在,直到程序终止,尽管这些修改不会传播回执行环境:例如,可以使用它们strtok

所指向的数组的大小argv至少为argc+1,最后一个元素argv[argc]保证为空指针。

main函数有几个特殊的属性:

1)该功能的原型不能由程序提供

2)如果主函数的返回类型与之兼容int,那么从初始调用返回到main(但不是从任何后续递归调用返回)相当于执行该exit函数,其值为主函数作为参数返回传递(然后调用注册的函数atexit,刷新并关闭所有流,并删除创建的文件tmpfile,并将控制权返回给执行环境)。

3)如果主函数的返回类型与int(eg void main(void))不兼容,则返回到执行环境的值未指定

4)main函数的主体不需要包含返回语句:如果控制到达main没有遇到return语句的结尾,效果就是执行return 0;

演示如何通知程序哪里可以找到它的输入以及在哪里编写结果。

Invocation: ./a.out indatafile outdatafile.

#include <stdio.h>
 
int main(int argc, char *argv[])
{
    printf("argc = %d\n", argc);
    int ndx = 0;
    while (ndx < argc)
    {
          printf("argv[%d] --> %s\n", ndx,argv[ndx]);
          ++ndx;
    }
    printf("argv[argc] = %s\n", argv[argc]);
    return 0;
}

可能的输出:

argc = 3
argv[0] --> ./a.out
argv[1] --> indatafile
argv[2] --> outdatafile
argv[argc] = (null)

参考

  • C11 standard (ISO/IEC 9899:2011):
    • 5.1.2.2.1 Program startup (p: 13)
  • C99 standard (ISO/IEC 9899:1999):
    • 5.1.2.2.1 Program startup (p: 12)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • 2.1.2.2 Hosted environment

C 语法相关

1.#define directive
2.#elif directive
3.#else directive
4.#endif directive
5.#error directive
6.#if directive
7.#ifdef directive
8.#ifndef directive
9.#include directive
10.#line directive
11.#pragma directive
12.alignas
13.Alternative operators and tokens
14.Analyzability
15.Arithmetic operators
16.Arithmetic types
17.Array declaration
18.Array initialization
19.ASCII Chart
20.Assignment operators
21. types
22.Basic concepts
23.Bit fields
24.break statement
25.C language
26.C Operator Precedence
27.cast operator
28.character constant
29.Comments
30.Comparison operators
31.compound literals
32.Conditional inclusion
33.Conformance
34.const type qualifier
35.Constant expressions
36.continue statement
37.Declarations
38.do-while loop
39.Enumerations
40.Escape sequences
41.Expressions
42.External and tentative definitions
43.File scope
44.floating constant
45.for loop
46.Function declarations
47.Function definitions
48.Functions
49.Generic selection
50.goto statement
51.Identifier
52.if statement
53.Implicit conversions
54.Increment/decrement operators
55.Initialization
56.inline function specifier
57.integer constant
58.Lifetime
59.Logical operators
60.Lookup and name spaces
61.Member access operators
62.Memory model
63.Objects and alignment
64.Order of evaluation
65.Other operators
66.Phases of translation
67.Pointer declaration
68.Preprocessor
69.restrict type qualifier
70.return statement
71.Scalar initialization
72.Scope
73.sizeof operator
74.Statements
75.static assert declaration
76.Static storage duration
77.Storage-class specifiers
78.string literals
79.Struct and union initialization
80.Struct declaration
81.switch statement
82.Thread storage duration
83.Type
84.Type
85.Typedef declaration
86.Undefined behavior
87.Union declaration
88.Value categories
89.Variadic arguments
90.volatile type qualifier
91.while loop
92._Alignof operator
93._Noreturn function specifier
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。