IS_BIG_ENDIAN 宏有效,但在 #if 中无效

安东尼瓜尔维亚

这让我感到困惑:如果我注释掉从 #if 到 #endif 的所有内容,程序将在 C99 (TinyCC) 中编译。在它的条件下,在#if 子句之前的行中给出了预期的错误“)”(得到“0”)

#include <stdio.h>

#define IS_BIG_ENDIAN (!*(unsigned char *)&(uint16_t){1})

#if IS_BIG_ENDIAN 
   struct ieee {     
     unsigned long sign:1;
     unsigned long expo:8;
     unsigned long mantissa:23;
    };   
   
#else
 
  struct ieee {   
    unsigned long mantissa:23;  
    unsigned long expo:8;
    unsigned long sign:1;
  };    

#endif


int main()
{  
 printf ("%d\n",IS_BIG_ENDIAN); 
}
忙碌的蜜蜂

预处理器通常不知道如何计算所有 C 表达式。它的能力相当有限。

如果用 注释掉 if 行#if,则不会评估宏。这就是为什么您不会收到错误消息。

但是如果宏被评估,你会让预处理器解析表达式。显然它不能这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

宏在Word 2013中有效,但在2010年中无效

为什么取消注释的宏在clang中无效但在msvc中有效

orphanRemoval在PostgreSQL中有效,但在hsqldb中无效

函数在查询中有效,但在约束中无效

Scrapy 在 shell 中有效,但在代码中无效

代码在终端中有效,但在脚本中无效

WritePrivateProfileString 在 main 中有效但在函数中无效

更新集命令在 Access 中有效,但在带有 @parameters 的 Visual Studio 中无效

AppActivate在Excel 2007中有效,但在2010年中无效

Boost union在1.67中无效,但在1.61中有效。为什么?

jarsigner -verify在Java 6中有效,但在Java 7中无效

import pyttsx在python 2.7中有效,但在python3中无效

对象!= nil在Beta 5中有效,但在Beta 6中无效吗?

内联在 CSS 中的 SVG 在 Chrome/Edge 中有效,但在 Firefox 中无效

在TypeScript中创建GUID-函数在JS中有效,但在TS中无效

为什么该程序在Python 2.7.6中有效,但在Python 3中无效?

Set-ItemProperty在PowerShell 5.1中有效,但在7.0中无效

图形在Chrome上有效,但在Firefox上无效

CurrentItem在iOS上无效,但在Android上有效

DelegatingHandler在Localhost上有效,但在Azure上无效

rmarkdown :: render无效,但在编织时有效

Cognito Auth 在 Prod 中有效,但在本地无效

CSS和FORM有效,但在嵌入时无效

WebRequest 在本地有效,但在发布时无效

API 调用在本地有效,但在现场无效

Excel VBA - 导入有效但无效的宏

导入模块在 IDE 中有效,但在 windows 命令行中无效(已编辑)

负面的 Lookbehind 在编辑器中有效,但在 Powershell 脚本中无效

Android Volley请求在模拟器中有效,但在设备中无效