相关疑难解决方法(0)


使用C void参数"void foo(void)"或不使用"void foo()"更好吗?

什么是更好的:void foo()void foo(void)?随着虚空,它看起来丑陋和不一致,但我被告知它是好的.这是真的?

编辑:我知道一些旧的编译器做了奇怪的事情,但如果我只使用GCC,那void foo()好吗?将foo(bar);随后被接受?

c void

200
推荐指数
6
解决办法
10万
查看次数

void main和int main之间的区别?

我声明我的C++程序的方式有关系吗?

c++ standards

54
推荐指数
6
解决办法
6万
查看次数

int main(){}(没有"void")在ISO C中是否有效且可移植?

C标准main为托管实现指定了两种形式的定义:

int main(void) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

int main(int argc, char *argv[]) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

它可以以与上述"等效"的方式定义(例如,您可以更改参数名称,替换int为定义为int或写char *argv[]为的typedef名称char **argv).

它也可以"以某种其他实现定义的方式"定义 - 这意味着如果实现记录它们,那么它们int main(int argc, char *argv[], char *envp)是有效的.

"以其他一些实施方式定义的方式"条款不在1989/1990标准中; 它是由1999标准添加的(但早期标准允许扩展,因此实现仍然允许其他形式).

我的问题是:鉴于当前(2011)ISO C标准,是表格的定义

int main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

所有托管实现都有效且可移植?

(请注意,我没有解决C++中的任何一个void main或没有使用 int main()括号的问题.这只是ISO int main(void)int main()ISO 之间的区别.)

c c99 language-lawyer c11

22
推荐指数
3
解决办法
1133
查看次数

为什么这在C中合法?

我正在为我的大学编写一个编译器/语言课程的玩具C编译器.

我试图在C中充实符号解析的语义,并提出了我尝试对常规编译器clang&gcc的测试用例.

void foo() { }
int main() { foo(5); } // foo has extraneous arguments
Run Code Online (Sandbox Code Playgroud)

大多数编译器似乎只是警告无关的论点.

问题:这背后的根本原因是什么?

对于我的符号表生成/解析阶段,我正在考虑一个函数是一个带有返回类型的符号,以及几个参数化的参数(基于语法),每个参数都有一个相应的类型.

谢谢.

c language-design

16
推荐指数
3
解决办法
830
查看次数

C中的简单垂直直方图

练习是在输入中打印不同字符的直方图.在底部是我的代码,我将不同的字符分成3个类别a,b或其他,如果代码成功,则推断为更多类别的字符.但它没有我想要的输出,例如,ab cd我期望的输入

  x
xxx
---
abo
  t
  h
  e
  r
Run Code Online (Sandbox Code Playgroud)

但我得到的只是

---
abo
  t
  h
  e
  r
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

#include<stdio.h>

main()
{
int i,c,b, max;
int array[3] = {0,0,0};


while( (c = getchar()) != EOF){
    if(c== 'a')
    ++array[0];
    else if(c== 'b')
    ++array[1];
    else if(c=='\n' ||c=='\t' || c==' '){}
    else ++array[2];
    }

array[0]=max;
i=0;

 while(i<3){
    if(max>=array[i])
        {}
    else array[i]=max;

    ++i;
 }

i=0;
max=b;
while(i<b){
    if(array[0]>=max){
        putchar('x');}
    else putchar(' ');


    if(array[1]>=max) {
        putchar('x');}
    else putchar(' ');


    if (array[2]>=max){
        putchar('x\n');}
    else putchar(' …
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
1206
查看次数

在C中,我应该定义(不声明/原型)一个不带void参数或空列表的函数吗?

这个问题可能有也可能没有,虽然我试图找到一个,但每个人的答案似乎只是指的是声明/原型.它们指定定义void foo() { }是相同的void foo(void) { },但我应该以哪种方式实际使用?在C89?在C99?我相信我应该开始使用void foo(void);我的原型声明,但如果我使用void或不使用定义,是否有任何区别?

c

1
推荐指数
2
解决办法
1341
查看次数