相关疑难解决方法(0)

C中的面试问题和讨论

这是在c的采访中向我提出的问题:

#include<stdio.h>
void main(){
  char *ch;
  ch=fun1();
  printf(ch);
}

fun1(){
  char *arr[100];
  strcpy(arr,"name");
  return arr;
}
Run Code Online (Sandbox Code Playgroud)

我得到了上述程序,并被要求弄清楚上述代码中的问题.下面是我的答案

  • 函数声明是错误的.返回类型应该是 char **
  • 语法printf错了
  • arr 范围仅限于该功能 fun1

然后

采访者:你的解决方案是什么?

:你需要将arr变量作为全局变量并修复上面提到的其余问题.

采访者:你不觉得全球变量是危险的吗?

:是的,因为我们不知道在哪些函数中访问它的位置,有时几乎不可能找到哪个函数改变了值

Ineterviewer:给我一个没有全局变量的解决方案

:????

你的解决方案是什么?任何人都可以指出我所犯的错误!

c global-variables

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

为什么静态标志而不是静态int标志不会给出任何错误?

我曾经写过一次匆忙

#include <stdio.h>

static flag;            
int main()
{
printf("flag is %d",flag);
return 0;
} 
Run Code Online (Sandbox Code Playgroud)

它不会给出任何警告或错误,并且工作正常.我不明白为什么这会起作用?

c

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

在C++中,(void)在参数中做了什么?

我有一行代码如下:

int method(void) const;
Run Code Online (Sandbox Code Playgroud)

但是我不确定参数中的(void)是什么,或者const是什么.这也应该是一个公共'get',我不确定如何在类中接近(void)和const.

c++ methods void

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

编译器警告-参数列表有所不同

我正在尝试编译以下源代码,这些源代码可以在gccMicrosoft和Microsoft上成功编译cl.exe

void SomethingBeforeExit();

void SomethingBeforeExit()
{
    // some code
    _exit(0);
}

int main(int argc, char *argv[])
{
    // some code
    atexit(SomethingBeforeExit);
}
Run Code Online (Sandbox Code Playgroud)

但是,我从以下消息中收到C4113警告cl.exe

SomeCode.c(10): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
Run Code Online (Sandbox Code Playgroud)

正如我所说,源代码仍然可以成功编译并且可以正常工作。我的目标是防止在中发生此警告cl,因为gcc在编译时不会生成任何警告。

我假设该函数的声明未被视为void SomethingBeforeExit(void),但是,我不知道如何将函数的参数列表明确声明为void

我正在使用VS14and C/C++ 19.00.23918 for x86for cl.exegcc v5.4.0编译器来比较生成的警告。

c gcc visual-studio cl

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

标签 统计

c ×3

c++ ×1

cl ×1

gcc ×1

global-variables ×1

methods ×1

visual-studio ×1

void ×1