C入门系列(一)基础

2020-12-31  本文已影响0人  RabbitMask

因为工作需要,重新来过一遍C吧,不过既然要温故而知新,我们来个尽可能不一样的平台吧~
本系列入门教程环境:MacOS + GCC ,IDE 选择Jetbrains全家桶Clion,借助Cmake完成相关构建维护。


Linux/mac 通常自带gcc环境,如果是win的话大家看自己习惯吧,原则上编译器VS原生的MSVC更稳定些,但MinGW等依然是成熟的替代方案。

rabbitmask@promote ~ % gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.0 (clang-1200.0.31.1)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

万物入门:Hello,World!

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
rabbitmask@promote demo % gcc main.c 
rabbitmask@promote demo % ls
CMakeLists.txt          a.out                   cmake-build-debug       main.c
rabbitmask@promote demo % ./a.out 
Hello, World!

gcc [源文件名] -o [目标文件名]
gcc 命令如果不指定目标文件名时默认生成的可执行文件名为 a.out(linux) 或 a.exe(windows)。


Clion操作

配置编译器:

配置运行/调试首选项

^ + R : Run
^ + D : DeBug

默认是编译完成后自动运行的,当然也可以进入默认配置路径手动运行:

rabbitmask@promote demo % cd cmake-build-debug 
rabbitmask@promote cmake-build-debug % ls
CMakeCache.txt          CMakeFiles              Makefile                Testing                 ccl.c                   cmake_install.cmake     demo                    demo.cbp
rabbitmask@promote cmake-build-debug % ./demo 
Hello, World!

其中的默认路径,来自于Makefile中的相关默认配置:

# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /Users/rabbitmask/Desktop/SourceCode/C/demo

# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /Users/rabbitmask/Desktop/SourceCode/C/demo/cmake-build-debug

作为初章,我们不做过多展开,仅简单了解下类Unix环境下的GCC编译和Clion与Cmake的简单使用。


C90 / C99 / C11标准

在以往VS的使用过程中,一直没有太留意C语言标准对代码的影响,但既然Clion把这个问题抛出来了,那我们在入门系列的开始还是简单提及下。

C90 习惯上也会有称C89,因为是ISO在1990年批准了 ANSI在1989年提出的ANSI C(C89) 。而C99和C11分别对应1999年和2011年。
C99 标准新增特性:内联函数(inline functions)、可变长度的数组、灵活的数组成员(用于结构体)、复合字面量、指定成员的初始化器、对IEEE754浮点数改进、支持不定参数个数的宏定义,在数据类型上增加了 long long int 以及复数类型等。
C11标准新增特性:字节对齐说明符、泛型机制(generic selection)、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持等。

撇开这些对于对于新手并不友好的概念暂且不谈,其实随着版本更迭也会带来很多经常使用的特性。如类似java等语言的单行注释语法//,此语法在C99标准才开始引入,再比如无return函数定义,void main(),在C99标准以前是允许main()这种语法作为等价存在的。不过讲到这里啦,顺便提一嘴,C标准中从未出现过void main()main()的语法标准,只有int main(void)int main(int argc,char *argv[])两种标准,但编译器却容忍啦void main()的存在,至于什么是对,什么是错,我们就不在这个入门系列探讨这么绅士的问题啦,我们能做的就是接受合理的标准,保持优雅的代码风格。

so,本系列教程将按照C11标准进行学习。

上一篇下一篇

猜你喜欢

热点阅读