【发布时间】:2024-01-16 19:59:01
【问题描述】:
代码:
#include <stdio.h>
int main()
{
int a=10;
static int b=2;
a = a+1;
b = b-1;
printf("%d \n",a);
printf("%d \n",b);
printf("%d \n","%d",a,b);
return 0;
}
输出:
11
1
4210693
我的问题: b 是一个静态变量,那么它的值在第二个使用的 printf() 函数中是如何变化的呢?第三个 printf() 函数是有意义的,因为它给出了一个错误。
【问题讨论】:
-
它会改变值,因为你在
b = b-1;-static行中明确这样做并不意味着不可变 -
值可能会因未定义的行为而改变,这允许任何事情发生。
-
正如@UnholySheep 所建议的,我认为您将
static int b=2;与const int b=2;混淆了 -
您有一个
printf调用,您可以在其中为仅包含 1 个格式说明符的格式字符串提供 3 个参数。如果您的编译器没有告诉您该不匹配,您需要提高警告级别。对于 GCC,您可以使用-Wall -Wextra执行此操作。如果您的编译器确实告诉了您,请听听您的编译器! -
感谢您的 cmets。 @Gerhardh 我正在使用 Codeblocks,我会寻找一种方法来提高其警告级别,因为它没有警告我。
标签: c printf string-literals conversion-specifier