C unsigned 用法
例:#define NELE(a) (sizeof(a) / sizeof(a[0]))
int main() {
char str[] = {'E', 'M', 'C'};
for (int d=-1; d<=(NELE(str)-2);d++)
printf("%c",str[d+1]);
return 0;
}
判断printf()输出的是什么,结果可能出乎意料,什么也没有输出,原因呢?原因在于sizeof()方法返回的是一个unsigned int类型,故NELE(a)返回的是一个无符号整数,由于C语言的语法规定:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。故上述程序中的d将自动变为无符号的整数,d变为了unsigned int型的最大值。所以没有任何输出。
相关文档:
C/VC目录操作
星尘 发表于 2006-10-11 15:54:00
0
推荐
一、目录操作函数介绍
在VC++的“direct.h”中定义了以下4个函数:
int chdir(const char *); //change directory
char * getcwd(char *, int); //get current working directory
int mkdir(const cha ......
预处理器(Preprocessor)
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
我在这想看到几件事情:
1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2). 懂得预处理器将为你计算常数表达式的值,因此,直接 ......
很奇怪,以前一直以为C++是兼容C的,但是,今天用lex&yacc生成的C代码可用通过GCC的编译,
但是怎么都通不过G++的编译,而其错误很多,有可能是lex&yacc生成的C代码太老了,,,
我是这样解决的
把lex&yacc生成的代码 用 GCC -c 编译成 lex.o 的目标文件。然后 g++ main.cpp lex.o ,就OK了
记得: 在 main. ......
C++语言的创建初衷是“a better
C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程
式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的 ......