1

Linux下的C编程语言和C编程有什么区别?

它们的语法是否相同?

还是仅在执行程序时有所不同?

4

6 回答 6

4

C 语言受 ISO 批准的 C 标准管理,它没有考虑您使用 C 的底层平台。所以从语言标准的角度来看,没有区别,一个符合标准的程序应该可以正常工作两个都。

但是在实际使用中,需要做一些特定于平台的事情,例如:IPC 机制、多线程、文件访问等等,这些都是特定于平台的,这些功能会因平台而异,因为每个平台都会提供特定于自己的功能。请注意,C 语言标准未涵盖此类功能,因此使用它会使程序无法跨其他平台移植。

于 2013-08-31T14:40:41.370 回答
2

Linux 是一个平台,可用于使用 C 等语言开发程序和应用程序。唯一的事情是它应该是它的简单性和人们对特定操作系统的喜爱。否则,语法没有区别。完全一样。

于 2013-08-31T14:40:44.130 回答
1

有语言,有平台。流行的语言通常由标准(例如,ANSI)管理。C是一种编程语言。

Linux、Windows、Android 等是平台(或者,特别是操作系统)。每个平台都提供一组库(API 调用),您可以访问这些库以在该平台上执行不同的操作。文件系统访问、网络、特定窗口/GUI 系统等的系统/库调用在不同平台上可能不同。因此,知道如何“在 Linux 上编写 C”意味着您了解 C,并且您了解很多 Linux 平台调用。甚至 Linux 下不同的窗口系统也可以有不同的 API 调用。

还有跨平台的标准,例如 POSIX,它们可以使库在不同平台上的调用相同。尽管这并不能解决 GUI API 之间的大部分差异。

于 2013-08-31T14:45:38.093 回答
1

C 语言编程语法是在 ISO C 标准下定义的。最终的执行取决于用于将代码转换为可执行程序的编译器以及运行编译的机器(或至少运行编译的目标架构)。该编译的结果将取决于编程语法(代码)的使用与编译器对该代码的解释。如果程序员将其编程习惯限制为编写符合 C 代码的代码,不包括实现定义的行为或未定义的行为,那么生成的可执行文件将在任何平台上表现相同。

然后您将其视为您可以制作大约三个 C 实现“层”:内核编程、系统编程和用户空间编程。

内核编程是硬件级编程,通常利用实现定义的行为将硬件世界连接到软件世界。它们为系统程序员提供了一个 C 接口。它们因机器而异,并且由这些实现产生的架构定义了各种操作系统之间的差异(例如:window vs linux vs OsX vs MIT exokernel 等)。

系统程序员利用内核(系统的)API 来构建 C 标准库(他们定义了更高级别 C 标准功能的实现)。例如:glibc 和 gnu c 编译器 (gcc) 应该是 iso C 符合 C 标准的明确部分,并定义实现定义和未定义行为的实现。该实现层是硬件独立的(在某种程度上),因为内核级别构成了硬件抽象。但是它们处理来自该抽象层的资源(例如:RAM 或写入硬盘驱动器上的文件或在 Internet 套接字上发送数据流)。

用户空间程序员编写使用标准 API 和编译器的程序来构建“可用”软件,例如 gnome-terminal 或 i3 Windows 平铺管理器(我找不到在 Windows 下运行的“用户友好”C 代码示例从我的头顶......)。除非这些软件实现诉诸实现定义代码或未定义行为代码,否则它应该是平台独立的。

于 2013-10-18T13:53:36.657 回答
0

答案很简单:没有区别!

但是,每个操作系统都有自己的 API。此 API 不依赖于编程语言。

示例:“MessageBox()”函数仅存在于 Windows 中,不存在于 Linux 中。它是一个特定于 Windows 的函数(在 Windows 下的任何编程语言中都可用)。

还有一些在 Linux 和 Windows 中命名不同的库函数。

一个示例是在 Linux 下名为“strcasecmp()”的“stricmp()”函数 (Windows)。然而,这不是 C 编程语言的问题,而是库(.H 文件和 .SO 文件)的问题。

于 2013-08-31T14:42:08.667 回答
0

不同的操作系统将具有不同的 API(应用程序编程接口),它们可以是为构建特定操作系统的应用程序软件而构建的库。GNU/Linux 具有特定于它的库,例如sys/socket.hlinux.hsys/types.h等。

于 2017-11-11T20:46:31.263 回答