C面谈产出

C面谈产出,c,output,C,Output,这是我的一道试题。我想知道是否应该使用静态int。你能帮帮我吗?我不能容忍这种做法,这是一个可怕的想法。但从技术上讲,这符合问题的标准 void fun() { // What goes here? } void main() { int x = 20; fun(); x = 10; printf("%d",x); // Should print 20. } 标准免责声明适用 方法1:在内部作用域中创建一个新的x变量 void fun() { // Es

这是我的一道试题。我想知道是否应该使用
静态int
。你能帮帮我吗?

我不能容忍这种做法,这是一个可怕的想法。但从技术上讲,这符合问题的标准

void fun()
{
    // What goes here?
}
void main()
{
    int x = 20;
    fun();
    x = 10;
    printf("%d",x); // Should print 20.
}

标准免责声明适用

方法1:在内部作用域中创建一个新的
x
变量

void fun()
{
// Essentially this is a function with an empty body
// And I don't care about () in a macro
// Because this is evil, regardless
#define printf(a, b) (printf)(a, b*2)
}

void main() // I know this is not a valid main() signature
{
  int x = 20;
  fun();
  x = 10;
  printf("%d", x);
}
方法2:定义第二个变为
10
的变量,以便
x
始终可以是
20

void fun()
{
    #define fun() { int x
    #define printf } printf
}

正如您所知,C中
main()
的两个有效签名是
intmain(void)
intmain(intargc,char**argv)
(或者等效地,
intmain(intargc,char*argv[])
)。我能想到的唯一一件事,可能不是他们在追求什么(或者可能是,但我只是说,因为它说“在主函数中”),就是调用
printf(“20\n”)然后
退出(0)
fun()
中。是否只需要从主方法打印?您可以从
fun()
内部打印20,然后从
退出()。。。在测试中仍然是一个愚蠢的问题。你需要x是全局的,或者通过x来测试function@SudipBhattarai即使您这样做,
x
fun()
返回之后和
printf()
prints.Ha之前被设置为
10
。我应该知道有一种奇怪的方式。OP(@Muthu)知道(我这么说是因为我确信+void\u ptr已经知道这一点),这实际上并没有在
fun()
中加入任何“逻辑”,因为这个
#define
可以在任何地方(在使用之前)实现相同的结果(因为预处理/宏扩展发生在编译之前,也就是说,这在技术上只会更改
main()
中的“逻辑”)。
void fun()
{
    #define x x=20,y
}