【问题标题】:How to run a function with empty main() method in C? [duplicate]如何在 C 中使用空的 main() 方法运行函数? [复制]
【发布时间】:2020-01-24 11:10:55
【问题描述】:

这种方法适用于C++,但不适用于C

它给了我这个错误initializer element is not constant

#include <stdio.h>

int n = printf("Hello World");

int main() {}

如何使用空的main 函数打印hello world

我只需要把这个C++代码转换成C

#include <iostream>
using namespace std;

int n = printf("Hello World");

int main() {}

或者这个

#include <iostream>
using namespace std;

int fun()
{
    cout << "Hello World";
    return 1;
}

int x = fun();

int main() {}

或者这个 C++ 代码

#include <iostream>
using namespace std;

int fun()
{
    cout << "Hello World";
    return 1;
}

int x = fun();

int main() {}

【问题讨论】:

  • 在 C 变量初始化器中需要是编译时常量。函数调用发生在运行时,因此它们的结果不能是编译时常量。
  • 至于你想做什么,为什么你想做什么?您是否需要解决一个真正的潜在问题,或者仅仅是出于好奇?如果出于好奇,请在您的问题中添加相关说明,否则请直接询问您需要解决的实际问题。
  • 此外,C 和 C++ 是非常不同的语言,尽管有一些共同的语法和共同的根源。这两种语言在很多事情上都有非常不同的规则。

标签: c++ c main


【解决方案1】:

没有main() 是很有可能的,但需要重新定义_start() 函数。

/*main.c*/

#include <stdio.h> 
#include <stdlib.h>

void _start() 
{  
    printf("No main function!\n");
    exit(0); 
} 

编译:

适用于 Windows(10,gcc 8.1.0)和 Ubuntu(18.04,gcc 9.2.0)

gcc main.c -nostartfiles

适用于 MacOS(10.14.6、Xcode 11.3)

clang -Wl,-e,-Wl,__start main.c

更多关于Linux程序启动Linux x86 Program Start Up

【讨论】:

    【解决方案2】:

    如何在 C 中使用空的 main 方法运行函数?

    简答

    以任何适合生产代码的方式都是不可能的。

    长答案

    这是可能的,但涉及很多技巧,例如重新定义程序应该从哪里开始执行。它不能以标准方式完成。 C 根本不允许在函数之外进行声明和初始化之外的其他事情。

    一个相关的事情是可以将 main 声明为函数以外的其他东西。这是一篇关于编写打印“Hello World!”的程序的文章。同时将 main 声明为数组而不是函数。 http://jroweboy.github.io/c/asm/2015/01/26/when-is-main-not-a-function.html

    这可能就是你需要使用的诡计级别。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 2018-05-04
      • 2018-05-15
      • 1970-01-01
      • 2015-05-01
      • 2017-01-30
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多