第1个回答 2009-04-23
可以这么写:
#define uint unsigned int
#define a 10
const uint b=3; /////////////注意,这里加了const,把b赋值为3,并且不可改变,它需要在c=a*b之前
uint c=a*b;
int main
{
//...
}
也可以这么写:
#define uint unsigned int
#define a 10
uint b=3; /////////////b是全局变量,也可以放在main函数里面,作为局部变量
uint c;
int main
{
c=a*b;////////在程序里,给全局变量,用其他变量赋值
//...
}
总结:
1、如果用常量给全局变量赋值,可以在声明全局变量的时候,就对其赋值。
2、如果要用变量给全局变量赋值,赋值语句,必须写在程序里面。
第2个回答 2009-04-23
1.全局变量(包括静态内部变量)的初始化是在编译阶段进行,与编译预处理(#define a 10 )的处理过程在同一阶段,冲突。
#include <stdio.h>
#define uint unsigned int
#define a 10
uint b=3;
int main()
{static uint c=a*b; /*静态内部变量,也是错误的。*/
int i, m[7]= {1,2,3,4,5,6,7};
for(i = 0; i < 7; i++)
{
printf("%d ",m[i]);
}
return 0;
}
2.动态变量的处理过程在运行阶段,uint c=a*b;没问题。
#include <stdio.h>
#define uint unsigned int
#define a 10
uint b=3;
int main()
{uint c=a*b;/*动态变量,正确*/
int i, m[7]= {1,2,3,4,5,6,7};
for(i = 0; i < 7; i++)
{
printf("%d ",m[i]);
}
return 0;
}
第3个回答 2009-04-23
将C定义为宏,满足楼主的要求,输出结果如下:
30
60
Press any key to continue
程序如下:
#include <stdio.h>
#define a 10
#define unit unsigned int
unit b=3;
#define C a*b
void main()
{
printf("%u\n",C);
b=6;
printf("%u\n",C);
}
如果不用宏,直接用uint C=a*b;两次结果都为30,不变,不是想要的