C语言的组成 以及预编译
这么多年过去了,回头再来学习一下C语言,发现很多不一样的感觉
#include <stdio.h>
int main(int argc, const char * argv[]) {
printf("Hello, World!\n");
return ;
}
十多年前学的第一个编程语言,重新认识一下
#include 预处理指令,不是c语句,因为末尾没有分号。C语言提供了很多的预处理功能,预处理指令都以#开始,经常遇到的#define(宏定义)、#include(文件包含)、#ifdef(条件编译)、#error(停止编译)等。
预处理指令是干嘛的呢?
答案:C语言要被机器认识执行,需要将C语言进行编译生成可执行的文件,这样机器才会认识这是什么东西。整个过程的顺序是:预处理-编译-汇编-链接-生成可执行文件。可以看到预处理是最先得步骤,还是比较重要的。
比如:#include<stdio.h>就是stdio.h的文件复制到这个文件中,这样编译时处理的就不是#include<stdio.h>这个操作了,而是直接去执行stdio.h里的内容了
#define 进行宏替换,将使用了定义的宏的值进行替换
#ifdef 根据不同条件进行编译,条件编译的指令有好几个
#error 强制停止编译,调试时给出错误信息
main:是一个函数,每一个c程序有且只有一个main函数,main是整个c程序的入口,由系统调用的
int argc, char *argv[] ::main函数的两个参数,argc是整形,argv是指针数组,agrc命令行参数个数,argv保存每个命令行参数的字符串首地址,这两个参数由系统传递
{} main函数的实现过程
printf:标准库提供的格式化输出函数,他的作用是将Hello, World!字符串输出到终端上
return 0:函数返回,他的作用是将0返回给系统,一般返回的是一个状态
c语言的组成:
C语言是由数据结构和算法构成的,数据结构是指数据的组成形式,算法是对数据的操作方法,所以编程是一个创造艺术的过程,必须将算法和数据进行近乎完美的组合才能创造出各种各样的生活。
数据结构有很多种,数据结构可分为:
1:数据之间没有直接的联系(变量 int a, int b)
2:数据之间呈现一对一的联系(数组,链表,栈,队列)
3:数据之间呈现一对多的联系(树)
4:数据之间呈现多对多的联系(图)
C语言的精髓就是数据结构与算法。最近在写分布式网络爬虫,发现算法是非常非常重要的,当处理的数据大到不可想象时,才能懂算法的重要。而c语言在处理数据时相对其他高级语言要快很多。所以想要做一个飞侠,那就好好将C语言理解。
C语言的组成 以及预编译的更多相关文章
- C语言中执行到预编译
在Linux中,执行命令:gcc -o linux.i linux.c -E
- 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)转
vs2010的mfc项目中编译c语言出现错误: "...预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)" 解决方法: 建工程时 建立空项目 ...
- C语言的傻瓜式随笔(二):全局变量、预编译、goto
函数的作用:可以实现代码的重用. 函数只需要定义1次,那么函数中的代码就可以随意的调用. -某不知出处的基本概念 学而时习之,如有误笔,请指正 一.goto跳转语句 goto在C语言的作用 ...
- 浅谈css的预编译---less语言
正如各位所知道的一样,css是一门标记性语言,语法相对简单,对使用者的要求也比较低 .不过可乐不知道友友们有没有发现,在使用css的时候需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤 ...
- c语言中条件编译相关的预编译指令
一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编 ...
- Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)
Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...
- 聊聊C语言的预编译指令include
"include"相信大家不会陌生,在我们写代码时,开头总会来一句"include XXX".include是干嘛用的,很多教材都提到了,因此这里不会再详细解释 ...
- C语言的预编译
由"源代码"到"可执行文件"的过程包括四个步骤:预编译.编译.汇编.链接.所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译 ...
- c语言学习笔记---预编译
专题三: 1) 预编译 处理所有的注释,以空格代替, 将所有的#define删除,并且展开所有的宏定义, 处理条件编译指令#if,#ifdef,#elif,#else,#endif 处理# ...
随机推荐
- dotnet core 发布环境变量配置 dev/stage/prod
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-2.2 https://d ...
- 2018.09.09 UVa10529 - Dumb Bones(期望dp)
传送门 期望dp好题. f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了. 代码: #include<bits/stdc++.h> #define N ...
- xampp虚拟主机的配置
ps:来源 https://blog.csdn.net/qq_17335153/article/details/52091869 一.修改httpd.conf 文件目录 xampp => ...
- Vim配置(转)
1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表头:包括文件名.作者.联系方式. ...
- Deployment failure on Tomcat 6.x. Could not copy all resources to D:\...\webapps\eptInfo. If a file is locked, you can wait until the lock times out to redeploy, or stop the server and redeploy, or ma
tomcat服务并没有启动.工程中之前引了一个包,后来这个包被删除了,但是因为已经发布过这个工程了,所以classpath中就有这个包名了,这样发布的时候也会去找这个包但是已经不存在了,所以无copy ...
- 玩转git分支
搞个代码的管理工具,居然不弄上分支啥的东西.这简直太low了.尤其是在使用了传说中得很牛X的Git的时候,尤其显得low.拿着青龙偃月刀当烧火棍子使,关公知道了还不重反人间教育你!? 远程分支 要说分 ...
- 如何更新world文档的目录
在想要设置目录的文档页,右键 -> 更新域, 或者在想要设置目录的文档页,按下 F9 即可 拓展: 在目录文档页 ,按Ctrl 并且单击鼠标可以跟踪目标连接 如果内容对您有所帮助,请打赏--- ...
- hdu3333 Turing Tree 2016-09-18 20:53 42人阅读 评论(0) 收藏
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 酒店订房系统:如何使用mysql来确定一个时间段内的房间都是可订的
需要解决的问题: 假设一个用户选择了日期范围来进行订房,例如:2014-04-25至2014-04-30 ,那么现在问题就出现,你必须要确认在这个时间段内某个房间是否都是有房间的,如果没有那么当然不能 ...
- .net4.0重新注册IIS 的方法
操作步骤如下: 1.开始 2.运行 3.cmd 4.cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 5.aspnet_regiis.exe -i