我需要生成一个随机数而不使用" random"函数,所以我发现这个代码在系统中给我mlliseconds:
#include <stdio.h>
#include <sys/timeb.h>
int main()
{
struct timeb tmb;
ftime(&tmb);
printf("tmb.time = %ld (seconds)\n", tmb.time);
printf("tmb.millitm = %d (mlliseconds)\n", tmb.millitm);
return 0;
}
直到我尝试以这种方式在struct中使用它才能正常工作:
#include <sys/timeb.h>
#include "stdlib.h"
struct Num{
struct timeb tmb;
ftime(&tmp);
};
int main()
{
return 0;
}
它在{ftime}给出错误。 任何帮助?
答案 0 :(得分:0)
ftime(&tmp);
是由C11/6.5.2指定的后缀表达式的示例(第四行向下):
postfix-expression: primary-expression postfix-expression [ expression ] postfix-expression ( argument-expression-listopt ) postfix-expression . identifier postfix-expression -> identifier postfix-expression ++ postfix-expression -- ( type-name ) { initializer-list } ( type-name ) { initializer-list , } argument-expression-list: assignment-expression argument-expression-list , assignment-expression
C标准参考指定了您在C11/6.7.2.1中使用的结构说明符的语法,显然您的示例违反了该语法,因为没有可能后缀表达式这里:
struct-or-union-specifier: struct-or-union identifieropt { struct-declaration-list } struct-or-union identifier struct-or-union: struct union struct-declaration-list: struct-declaration struct-declaration-list struct-declaration struct-declaration: specifier-qualifier-list struct-declarator-listopt ; static_assert-declaration specifier-qualifier-list: type-specifier specifier-qualifier-listopt type-qualifier specifier-qualifier-listopt struct-declarator-list: struct-declarator struct-declarator-list , struct-declarator struct-declarator: declarator declaratoropt : constant-expression
C的句法结构难以学习;它在大多数书籍中教得相当好。我的建议是你找到一个新的指南,因为如果你在语法上挣扎,C的语义将证明极具挑战性。正如我在你的问题的评论中写道:
我建议K&amp; R2E;当你遇到它们时进行练习(并且不要继续前进直到它们完成)。
如果您对教科书或练习中的某些词语感到困惑,请发布一个令您困惑的问题。