C语言中 给全局变量用表达式赋值的问题!~~

#define uint unsigned int
#define a 10
uint b=3;
需要再加一个全局变量C,值为:a*b,我用uint c=a*b;其实错误,请问正确应该怎么写?

变量初始化赋值时必须是常量,不能是变量.
所以你可以先在初始化定义
uint c=0;
之后在程序里给C赋值
c=a*b;

或者
#define uint unsigned int
#define a 10
#define b 3
uint c=(a*b);

只能这样....
给分吧.哈哈.

参考资料:C程序设计

温馨提示:答案为网友推荐,仅供参考
第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,不变,不是想要的
第4个回答  2009-04-23
正确应该 写 typedef unsigned uint;
----------------------------------------
#include <stdio.h>
#include <stdlib.h>

typedef unsigned uint;

#define a 10
uint b=3;
uint c;

void main()
{
c = a * b;

printf("%u",c);
}
相似回答