以下代码可以正常使用
#define open {
#define close }
#include<stdio.h>
#define int char
main()
open
int a ;
printf("This is testing code" );
close
但如果我换行
#include<stdio.h>
#define int char
as
#define int char
#include<stdio.h>
它会引发很多像这样的错误
In file included from /usr/include/stdio.h:36,
from print.c:19:
/usr/include/bits/types.h:35: error: both 'short' and 'char' in declaration specifiers
/usr/include/bits/types.h:37: error: both 'long' and 'char' in declaration specifiers
/usr/include/bits/types.h:42: error: both 'short' and 'char' in declaration specifiers
/usr/include/bits/types.h:43: error: both 'short' and 'char' in declaration specifiers
.................................................
so and so
实际上stdio.h中发生了什么?
答案 0 :(得分:8)
定义了short int
,long int
等类型的变量,当您通过定义更改为short char
和long char
时,这些变量显然会失败。
重新定义基本C类型通常不是一个好主意。
答案 1 :(得分:5)
失败的原因是,#include<stdio.h>
被替换为stdio.h
的内容,当您在内容中将int
替换为char
时,您会破坏一些声明。
从/usr/include/bits/types.h
stdio.h
.
.
typedef unsigned short int __u_short;
.
.
当您将int
替换为char
时,显然会变为:
typedef unsigned short char __u_short;
导致编译错误的原因short
无法应用于char
数据类型。
答案 2 :(得分:0)
你的#define将被激活并将替换stdio.h中的所有int以及它包含的所有文件,从而导致太多令人困惑的错误。
因为,错误来自types.h,它必须修改一些东西,比如'short int'到'short char'等。