什么是编译器?

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows

下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac OS

等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。

可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。

例如,在屏幕上输出"VIP会员",C语言的写法为:

puts("VIP会员");

二进制的写法为:

你感受一下,直接使用二进制是不是想撞墙,是不是受到一吨重的伤害?

在计算机发展的初期,程序员就是使用这样的二进制指令来编写程序的,那个拓荒的年代还没有编程语言。

直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。

这就倒逼程序员开发出了编程语言,提高自己的生产力,例如汇编、C语言、C++JavaPython、Go语言等,都是在逐步提高开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。

什么是编译器

C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成

.exe 程序;这个工具是一个特殊的软件,叫做编译器(Compiler)。

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。

编译也可以理解为"翻译",类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。对于学计算机或者软件的大学生,"编译原理"是一门专业课程,有兴趣的读者请自行阅读《编译原理》一书,这里我们不再展开讲解。

注意:不了解编译原理并不影响我们学习C语言,我也不建议初学者去钻研编译原理,贪多嚼不烂,不要把自己绕进去。

C语言的编译器有很多种,不同的平台下有不同的编译器,例如:

  • Windows 下常用的是微软编译器(cl.exr) ,它被集成在 Visual Studio 或 Visual C++ 中,一般不单独使用;
  • Linux 下常用的是 GUN 组织开发的 GCC ,很多 Linux 发行版都自带 GCC;
  • Mac 下常用的是 LLVM/Clang ,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。

你的代码语法正确与否,编译器说了才算,我们学习C语言,从某种意义上说就是学习如何使用编译器,让编译器生成可执行程序(例如 Windows 下的 .exe

程序)。

编译器可以 100% 保证你的代码从语法上讲是正确的,因为哪怕有一点小小的错误,编译也不能通过,编译器会告诉你哪里错了,便于你的更改。

什么是集成开发环境

实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:

  • 编辑器:用来编写代码,并且给代码着色,以方便阅读;
  • 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程;
  • 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误;
  • 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等;
  • 漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C++、Xcode、Visual C++

6.0、C-Free、Code::Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。

集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。

集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。

选择哪种集成开发环境

C语言的集成开发环境有很多种,尤其是 Windows 下,多如牛毛,初学者往往不知道该如何选择。我们将在接下来的三篇文章中,分别讲解 Windows、Mac

OS、Linux 下集成开发环境的选择:

当然,你不用全部都了解,如果你使用 Windows,那么请忽略 Mac OS 和 Linux;如果你使用 Mac OS,那么请忽略 Windows 和

Linux。

原文地址什么是编译器?CSS 响应式布局也称自适应布局,是 Ethan Marcotte 在 2010 年 5

月份提出的一个概念,简单来讲就是一个网站能够兼容多个不同的终端(设备),而不是为每个终端做一个特定的版本。这个概念是为解决移动端浏览网页而诞生的。响应式布局能够为使用不同终端的用户提供很好的用户体验,而且随着大屏智能手机的普及,用"大势所趋"来形容也不为过。

要实现响应式布局,常用的方式有以下几种:

  • 使用 CSS 中的媒体查询(最简单);
  • 使用 JavaScript(使用成本比较高);
  • 使用第三方开源框架(例如 bootstrap,可以很好的支持各种浏览器)。

接下来我们以媒体查询为例来具体演示一下响应式布局的实现。

设置 meta 标签

首先,我们需要设置 meta 标签来告诉浏览器,让视口(网页的可视区域)的宽度等于设备的宽度,并禁止用户对页面的缩放,如下所示:

在设置视口时需要注意,视口就是网页可见区域的尺寸,设置视口时只设置宽度就行,不用在乎高度,具体高度由网页内容自动撑开。上面 meta 标签中内容的含义如下:

  • viewport:即视口,表示网页的可视区域;
  • width:控制 viewport 的大小,可以指定一个具体的值,例如 600,也可以是由关键字组成的特殊值,例如 device-width 就表示设备的宽度;
  • initial-scale:表示初始缩放比例,也就是页面第一次加载时的缩放比例;
  • maximum-scale:表示允许用户缩放的最大比例,范围从 0 到 10.0;
  • minimum-scale:表示允许用户缩放到最小比例,范围从 0 到 10.0;
  • user-scalable:表示用户是否可以手动缩放,"yes"表示允许缩放,"no"表示禁止缩放。

媒体查询

CSS 媒体查询可以根据指定的条件,针对不同的媒体类型(screen print)定义不同的 CSS

样式,让使用不同设备的用户都能得到最佳的体验。

关于媒体查询有以下三种实现方式:

1、直接在 CSS 文件中使用,示例代码如下:

@media (max-width: 320px) {

    /*0~320*/

    body {

        background: pink;

    }

}

@media (min-width: 321px) and (max-width: 375px) {

    /*321~768*/

    body {

        background: red;

    }

}

@media (min-width: 376px) and (max-width: 425px) {

    /*376~425*/

    body {

        background: yellow;

    }

}

@media (min-width: 426px) and (max-width: 768px) {

    /*426~768*/

    body {

        background: blue;

    }

}

@media (min-width: 769px) {

    /*769~+∞*/

    body {

        background: green;

    }

}

2、使用 @import 导入,示例代码如下:

@import 'index01.css' screen and (max-width:1024px) and (min-width:720px)

@import 'index02.css' screen and (max-width:720px)

3、在 link 标签中使用,示例代码如下:

<link rel="stylesheet" type="text/css" href="index01.css" media="screen and (max-width:1024px) and (min-width:720px)"/>

<link rel="stylesheet" type="text/css" href="index02.css" media="screen and (max-width:720px)"/>

更多关于媒体查询的介绍大家可以查阅《CSS媒体查询》一节。

下面通过一个综合的示例来演示一下响应式布局的实现:

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title>响应式布局</title>

        <meta name="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1,user-scalable=no" />

        <style>

            *{

                margin: 0px;

                padding: 0px;

                font-family: "微软雅黑";

            }

            #head, #foot, #main

            {

                height: 100px;

                width: 1200px;

                /*width: 85%;*/

                background-color: goldenrod;

                text-align: center;

                font-size: 48px;

                line-height: 100px;

                margin: 0 auto;

            }

            #head div{

                display: none;

                font-size: 20px;

                height: 30px;

                width: 100px;

                background-color: green;

                float: right;

                line-height: 30px;

                margin-top: 35px;

            }

            #head ul{

                width: 80%;

            }

            #head ul li{

                width: 20%;

                float: left;

                text-align: center;

                list-style: none;font-size: 20px;

            }

            #main{

                height: auto;

                margin: 10px auto;

                overflow: hidden;

            }

            .left, .center, .right{

                height: 600px;

                line-height: 600px;

                float: left;

                width: 20%;

                background-color: red

            }

            .center{

                width: 60%;

                border-left: 10px solid #FFF;

                border-right: 10px solid #FFF;

                box-sizing: border-box;

            }

            @media only screen and (max-width: 1200px) {

                #head, #foot, #main{

                width: 100%;

                }

            }

            @media only screen and (max-width: 980px) {

                .right{

                    display: none;

                }

                .left{

                    width: 30%;

                }

                .center{

                    width: 70%;

                    border-right: hidden;

                }

            }

            @media only screen and (max-width: 640px) {

                .left, .center, .right{

                    width: 100%;

                    display: block;

                    height: 200px;

                    line-height: 200px;

                }

                .center{

                    border: hidden;

                    border-top: 10px  solid #FFFFFF;

                    border-bottom: 10px solid #FFFFFF;

                    height: 600px;

                    line-height: 600px;

                }

                #head ul{

                    display: none;

                }

                #head div{

                    display: block;

                }

            }

        </style>   

    </head>

    <body>

        <div>

            <header id="head">

                <ul>

                    <li>header1</li>

                    <li>header2</li>

                    <li>header2</li>

                    <li>header2</li>

                    <li>header2</li>

                </ul>

                <div>icon</div>

            </header>

            <section id="main">

                <div class="left">

                    left

                </div>

                <div class="center">

                    center

                </div>

                <div class="right">

                    right

                </div>

            </section>

            <footer id="foot">

                footer

            </footer>

        </div>

    </body>

</html>

当浏览器窗口小于 1200 像素大于 980 像素时,页面的样式如下图所示:

当浏览器窗口大于 640 像素小于 980 像素时,页面的样式如下图所示:

当浏览器窗口小于 640 像素时,页面的样式如下图所示:

原文地址CSS响应式布局

相关推荐
zhangjr05751 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
木子七1 小时前
vue2-vuex
前端·vue
麻辣_水煮鱼2 小时前
vue数据变化但页面不变
前端·javascript·vue.js
BY—-组态2 小时前
web组态软件
前端·物联网·工业互联网·web组态·组态
一条晒干的咸魚2 小时前
【Web前端】实现基于 Promise 的 API:alarm API
开发语言·前端·javascript·api·promise
WilliamLuo2 小时前
MP4结构初识-第一篇
前端·javascript·音视频开发
Beekeeper&&P...2 小时前
web钩子什么意思
前端·网络
啵咿傲3 小时前
重绘&重排、CSS树&DOM树&渲染树、动画加速 ✅
前端·css
前端Hardy3 小时前
HTML&CSS:数据卡片可以这样设计
前端·javascript·css·3d·html