c语言速记1(基本结构,编译运行,声明定义,类型,常量)

1,环境centos7.4,查看是否有gcc编译器

gcc -v

结果:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=sr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootsap --enable-shared --enable-threads=posix --enable-checking=release --with-sysm-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-uniquobject --enable-linker-build-id --with-linker-hash-style=gnu --enable-languagec,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-aay --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x864-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-201502/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-ne=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
已安装效果

补充:

GCC(GNU Compiler Collection,GNU编译器套件)
是由GNU开发的编程语言译器。
GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,
也包括了这些语言的库(如libstdc++,libgcj等。)
gcc全称及简介

2,实例:

#include <stdio.h> 
int main()
{
   /* hello  C 程序 */
   printf("Hello, World! 
");
   
   return 0;
}

程序主要结构:

结构概述:
预处理器指令
函数
变量
语句 & 表达式
注释

第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。
下一行 int main() 是主函数,程序从这里开始执行。
下一行 /*...*/ 将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。
下一行 printf(...) 是 C 中另一个可用的函数,会在屏幕上显示消息 "Hello, World!"。
下一行 return 0; 终止 main() 函数,并返回值 0

 3,操作

在home目录中创建my_c目录并创建一个hello.c文件将上面代码放入:

cd /home
mkdir my_c
cd my_c
。。。 vim hello.c :wq

编译执行

gcc hello.c //编译后,默认生成a.out文件
./a.out //执行生成的文件

Hello, World! //输出结果

补充:设置编译后的文件名称:

gcc hello.c -o hello.out //编译后的文件设置为hello.out
另一种写法:gcc -o hello.out hello.c
./ hello.out //执行 还可以将多个源码编译成指定的名称的文件 gcc test1.c test2.c -o main.out

补充:上面的编译其实包括:编译和链接

宏观编译干了啥:源码转换为二维码。
包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤

实际分为两部分:编译和链接

编译:
C语言代码经过编译以后,并没有生成最终的可执行文件(.exe/.out 文件),
生成了一种叫做目标文件(Object File)的中间文件又叫对象文件(临时文件)。
目标文件也是二进制形式的,它和可执行文件的格式是一样的。
(但只是将我们自己写的代码变成了二进制形式)
对于 Visual C++,目标文件的后缀是.obj;
对于 GCC,目标文件的后缀是.o。

链接:
与系统组件(比如标准库、动态链接库等)组合起来。
链接(Link)其实就是一个“打包”的过程,
它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。
完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。

总结:
编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。
编译器每次只能编译一个源文件,生成一个目标文件,
这个时候,链接器除了将目标文件和系统组件组合起来,
还需要将编译器生成的多个目标文件组合起来。

 可以通过-c指明不链接编译

1,将1.c文件不链接编译:
gcc -c 1.c 
//将输出1.o文件,

2,进行链接和直接编译成可执行一样:
gcc 1.o 
//默认输出a.out

3,指定输出文件名称:
gcc -o 1.out 1.o

4,数据类型

在Linux中32位和64位系统的(long相关的)一些类型占用的字节不一样(Windows一样)

可以通过函数sizeof查看类型占用字节大小,例子:

#include <stdio.h>
#include <limits.h>
 
int main()
{
   printf("int 存储大小 : %lu 
", sizeof(int));   
   return 0;
}

输出:
int 存储大小 : 4 

补充:printf函数

特别是函数的前段参数说明:比如:
"int 存储大小 : %lu 
":这是一串将直接输出的字符串
特殊的两部分需要注意:
%开头的占位符,这个占位符还能设置输出值的格式
%lu 为 32 位无符号整数

开头的转义符

 输出结果后换行

归纳:

 1 常用基本数据类型占用空间(64位机器为例)
 2  char : 1个字节
 3  int :4个字节
 4  float:4个字节
 5  double:8个字节
 6 
 7 基本类型书写
 8 整数
 9  a,默认为10进制 ,102010  b,以0开头为8进制,04502111  c.,以0b开头为2进制,0b11101101。
12  d,以0x开头为16进制,0x21458adf13 
14 小数
15 单精度常量:2.3f16 双精度常量:2.3,默认为双精度。
17 
18 字符型常量
19 用英文单引号括起来,只保存一个字符'a''b''*' ,还有转义字符 '
''	'20 
21 字符串常量
22 用英文的双引号引起来 可以保存多个字符:"abc"23 
24 1、数据类型转换:
25 C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;
26 在 C 语言中也可以对数据类型进行强制转换;
27 
28 2、自动转换规则:
29  a)浮点数赋给整型,该浮点数小数被舍去;
30  b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
31 3、强制类型转换形式: (类型说明符)(表达式)
View Code

5,声明和定义

详见:C语言extern的概念(声明和定义的区别)

6,常量

常量包括:整数常量,浮点常量,字符常量,字符串常量

定义常量:

在 C 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。

#define 预处理器定义常量的形式:

#define identifier value

特点:不用像java那样去指明类型,也不用等号赋值。

例子:

#include <stdio.h>
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '
' //换行符
 
int main()
{
   int area;  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);

   return 0;
}

结果:

value of area : 50

const 前缀声明指定类型的常量

const type variable = value;

貌似和java一样。

例子:

#include <stdio.h>
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '
';
   int area;  
   
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}
原文地址:https://www.cnblogs.com/straybirds/p/14743406.html