能力值:
(RANK:410 )
|
-
-
2 楼
len=4;
|
能力值:
(RANK:410 )
|
-
-
3 楼
经过调试发现,::后面的函数无论是什么VC都会被他忽略,不会编译到程序里去,所以::后的函数无论是什么,len都等于4(int的长度)。不过不明白是为什么会这样,期待下一楼解释。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
和操作系统相关
在32位机器上4,在64位机器上8。
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
不明白的是为什么“::GetCurrentProcessId();”不被执行。这是不是VC的Bug呀!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
len=sizeof(int)::GetCurrentProcessId();
这是什么语法关系啊? 我第一次见到,为什么在
int后面跟::呢?
|
能力值:
( LV8,RANK:130 )
|
-
-
7 楼
最初由 huoshan 发布 len=sizeof(int)::GetCurrentProcessId(); 这是什么语法关系啊? 我第一次见到,为什么在 int后面跟::呢?
把“::”去掉也是一样的!别让“::”影响了我们讨论的重点。
len=sizeof(int)GetCurrentProcessId();
|
能力值:
(RANK:1010 )
|
-
-
8 楼
关注。。。
|
能力值:
( LV12,RANK:650 )
|
-
-
9 楼
写成这样都可以
len = sizeof(int)123;
len = sizeof(int)"adfetrgghf";
下面这个却不行:
#include <stdio.h>
void nop() {}
int main()
{
int a = sizeof(int)nop();
printf("%d\n",a);
return 0;
}
改成这样就可以:
#include <stdio.h>
int nop() {return 0;}
int main()
{
int a = sizeof(int)nop();
printf("%d\n",a);
return 0;
}
ft~~~可能是VC的BUG,编译器在解析sizeof运算符时出了问题..
|
能力值:
( LV9,RANK:810 )
|
-
-
10 楼
麻烦的是这样写也不出错:
int len;
len=sizeof(int)
GetCurrentProcessId();
但后面的GetCurrentProcessId();函数调用给忽略了。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
是不是有优先级问题?
|
能力值:
( LV5,RANK:60 )
|
-
-
12 楼
这不是c的标准语法吧?
看编译器实现的问题,sizeof在编译阶段就展开为常量了.应该是vc的一个bug.不过vc本来对标准支持就查,我用intel CPP就编译不过
|
能力值:
( LV12,RANK:660 )
|
-
-
13 楼
可以试试用来做花指令,呵呵~
|
能力值:
( LV12,RANK:330 )
|
-
-
14 楼
int a=sizeof 1;可以,因为运算符后可以直接跟表达式
GetCurrentProcessId强制转换成(int),然后取这个整数的长度,但是void不能强制,所以。。。。
sizeof是静态取值,函数没被调用
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
这只能说是VC6太老了!
sizeof()以前是运算符,不是函数。以前是在编译期计算的。像int、char等这些类型的长度都是固定的,32位机器上直接用4替代sizeof(int);其它也是如此。复杂一些的比如结构,就是把各数据成员的长度加起来(最多就是考虑对齐)!编译器通过查找符号表,来确定某种类型的长度,然后返回该长度!C99标准sizeof()是运行期计算了,可以说是函数了!之所以C99的sizeof()是运行期运算,是因为C99支持了变长数组,所以想知道真正的长度就只能是在运行期才能知道了!
|
|
|