菜单开关

周梦康 发表于 2017-09-17 1625 次浏览 标签 : C语言快速入门

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

前言

该系列文章适合于一些有开发经验却不太懂 C 的程序员,比如大部分的 php 程序员。一些常规的名词(比如参数、函数、返回值)和一些通用的语法(比如 if elsefor 循环等)不再任何说明和解释,大家自行搜索即可。
我希望我的这个系列的博客能帮大家对 C 语言基础做到一个穿针引线的作用,让大家能够上手 C 语言的开发,比如 php 程序员开发 php 扩展。

实验

新建文件test1.c

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("%s\n", "1111");
    return 0;
}

编译

zhoumengkang@bogon:~/Downloads$ gcc test1.c -o test1

执行

zhoumengkang@bogon:~/Downloads$ ./test1
1111

总结

我们从上往下看,有两个知识点需要学习。

头文件

我们发现我们在最开始使用了#include <stdio.h>这个文件,这是因为我们在使用的printf函数是在stdio.h里面定义的。我们可以通过

man 3 printf

来查阅

PRINTF(3)                  Linux Programmer's Manual                 PRINTF(3)

NAME
       printf,   fprintf,  sprintf,  snprintf,  vprintf,  vfprintf,  vsprintf,
       vsnprintf - formatted output conversion

SYNOPSIS
       #include <stdio.h>

       int printf(const char *format, ...);
       int fprintf(FILE *stream, const char *format, ...);
       int sprintf(char *str, const char *format, ...);
       int snprintf(char *str, size_t size, const char *format, ...);

如上所示,也就是说在使用这四个打印函数的时候都需要包含<stdio.h>

  1. #include <xxx.h> 系统头文件
  2. #include "xxx.h" 自定义头文件

认识 man 命令

顺便说下为什么是man 3,因为man查看手册的时候是分章节的,章节列表

章节编号章节名称章节主要内容
1General Commands用户在shell中可以操作的指令或者可执行文档
2System Calls系统调用的函数与工具等
3SunroutinesC语言库函数
4Special Files设备或者特殊文件
5File Formats文件格式与规则
6Games游戏及其他
7Macros and Conventions表示宏、包及其他杂项
8Maintenence Commands表示系统管理员相关的命令

如果我输入的是

man printf

出来的结果和man 1 printf一样,查的是 shell 命令里面的printf

PRINTF(1)                        User Commands                       PRINTF(1)

NAME
       printf - format and print data

SYNOPSIS
       printf FORMAT [ARGUMENT]...
       printf OPTION
... 

man 是按照手册的章节号的顺序进行搜索的,所以我们在查C语言库函数的时候,记得使用man 3 xxx

main 函数

main 函数是整个程序的入口,所以编译一个项目,main 函数有且仅有有几个。

https://www.zhihu.com/question/28360770
main函数就是这个约定好的用户代码默认入口。
当然,只要你愿意,改成啥都行。比如你改成nomain,那么编译链接时就要指定入口了(同时指定不链接CRT的入口代码)。

#include <stdio.h>
#include <stdlib.h>

int nomain(int argc, char const *argv[])
{
    printf("%s\n", "1111");
    exit(0);
}
gcc xxx.c -e nomain -nostartfiles

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表