我在开发C程序的时候,需要在编译时根据int的位数选择性地宏定义一批常量,但是#if的表达式必须是常量,无法调用sizeof(int)去获取,那该怎么获取编译时设定好的,与int位数相关的,常量呢
#if () #define INTNUM_01 0x5555 #define INTNUM_02 0xaaaa #define INTNUM_03 0x3333#elif () #define INTNUM_01 0x55555555 #define INTNUM_02 0xaaaaaaaa #define INTNUM_03 0x33333333#endif
我试过用sizeof(int),属于编译错误。
#if (sizeof(int) == 2) #define INTNUM_01 0x5555 #define INTNUM_02 0xaaaa #define INTNUM_03 0x3333#elif () #define INTNUM_01 0x55555555 #define INTNUM_02 0xaaaaaaaa #define INTNUM_03 0x33333333#endif
在 <limits.h>
,有 INT_MAX
。
#if INT_MAX = 0x7fff
在 C23 之后,还有 INT_WIDTH
:
#if INT_WIDTH == 16
主要内容:#if 的用法,#ifdef 的用法,#ifndef 的用法,三者之间的区别假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢? 这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出不同的平台。 Windows 有专有的宏 ,Linux 有专有的宏 ,以现有的知识,我们很容易就想到了 if else,请看下面的代码: 但这段代码是错误的,在 Windows 下提示 __linu
在Windows下,可执行程序(Executable Program)大部分是 .exe 程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。 计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。 直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁
上一个小节 C 语言的程序结构中我们简单的认识了一下 C 语言的程序到底由那些部分组成,但是仅仅了解 C 语言的程序结构还不够,仅仅是万里长征走完了第一步,后面还需要进行很多的步骤才能让程序成为一个可以使用的工业产品。还记的上一个小节中我们提到的 gcc 吗?其实这是一个 C 语言的编译器,这一个小节我们就来学习一下编译器这个概念。 1. C 语言编译器 每个语言都需要编译器,甚至包括可以直接操作
问题内容: 我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以
问题内容: 我想知道为什么我们通过编译显示“ Hello,World!”的.c文件得到.o文件。是否大于Java .class文件,该文件也显示“ Hello,World!”? 问题答案: Java使用字节码来独立于平台并进行“预编译”,但是字节码由解释器使用并且被提供为足够紧凑,因此您在已编译的C程序中看到的机器代码并不相同。只需看一下Java编译的完整过程即可: 这是Java程序到机器代码转换
我读到,java源代码被编译成“字节码”,然后通过JIT再次“编译”成“机器码”。也就是说,源代码首先编译成独立于平台的字节码,然后再次编译成特定于机器的代码。那么为什么它同时被称为解释语言和编译语言呢?解释发生在哪里?