#if #ifdef #if define 和标识符

本文讨论了在C语言编程中遇到的宏定义#if、#ifdef使用错误,包括错误示例和解析。重点指出使用#define定义宏时不能包含浮点数,以及#if defined后面必须跟随标识符。同时,解释了#if、#ifdef的区别,以及它们与#elif、#endif的配合使用。文章还提到了防止头文件重复包含的#ifndef和#pragma once两种方法,并指出#pragma once并非所有编译器都支持。

小写了一个 宏定义的程序 没想到 编译居然报错了 , 一定又忘了什么 基础的知识   --00--

程序的第一版是 酱紫的:
#if defined(ANDROID2.0)
#pragma message ("the version is android 2.0")
#elif  defined(ANDROID3.0)
#pragma message ("the version is android 3.0")
#elif  defined(ANDROID4.0)
#pragma message ("hte version is android 4.0")
#else
#pragma message ("the version not input")
#endif

{

预处理就报错:root@ct:~/Desktop# gcc -E test.c -o test.i test.c:9:21: error: missing ')' after "defined" #if defined(ANDROID2.0)                     ^test.c:9:23: error: missing '(' in expression #if defined(ANDROID2.0) ....看了也不知道是什么问题 改来改去#if define ANDROID2.0 报错:test.c:9:21: error: missing binary operator before token ".0"#ifdef (ANDROID2.0) 报错:test.c:9:8: error: macro names must be identifiers意思是 宏定义后 要跟 标识符 :c语言中的标识符:关键字预定义标识符,用户自定义标识符------字母(A-Z,a-z)、数字(0-9)、下划线“_”组成这样就知道为什么报错了 ------2.0 的 '.' 有问题。

}

#if DEBUG #if(DEBUG) #if(DEBUG==0) 第三个是表达式 都是可以的实现: 1. 可以在预处理面前 定义宏 #define DEBUG 0       2. root@ct:~/Desktop# gcc -E test.c -DDEBUG=0 -o test.i

#ifdef + 标识符 (不可以加 () )

#if defined + 标识符 #if defined+ (标识符) 

以上三者都可以加 #elif必须加 #endif

#ifndef _TEST_H_

#define _TEST_H_

int global;

#endif

强调一下: test.c global.h test.h 在两个.h文件里都定义 int global; 但是有上面#ifndef 这个预处理 编译时就不会报错在预处理的时候还是会文本替换到c文件 ,但是在后期会直接刷掉区别 :#pragma once ====只处理一次 如果一个地方有定义 则预处理器根本就不会把个替换进去,相对而言 更高效 但是不是所有的编译器 都支持 #pragma once







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值