C++标准中的$ 3.6.1/1节,
程序应包含一个名为main的全局函数,它是程序的指定开始.
现在考虑这段代码,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
Run Code Online (Sandbox Code Playgroud)
此示例代码执行我打算执行的操作,即在进入main()应该是程序"开始" 的函数之前打印从0到9的整数平方.
我还用-pedantic选项GCC 4.5.0 编译它.它没有错误,甚至没有警告!
所以我的问题是,
这段代码真的符合标准吗?
如果它符合标准,那么它是否会使标准所说的无效?main()不是这个计划的开始!user_main()在执行之前执行main().
我知道要初始化全局变量main_ret,use_main()首先执行,但这是完全不同的事情; 关键是,它确实使标准中的引用语句$ 3.6.1/1无效,因为main() …
我问,因为我的编译器似乎这么认为,即使我没有.
echo 'int main;' | cc -x c - -Wall
echo 'int main;' | c++ -x c++ - -Wall
Clang没有发出任何警告或错误,gcc只发出温和的警告:'main' is usually a function [-Wmain]但是只有在编译为C时才指定.指定a -std=似乎并不重要.
否则,它编译和链接很好.但在执行时,它立即终止SIGBUS(对我来说).
阅读(C)和C++中main()返回的(优秀)答案?和快速的grep通过语言规范,这肯定会似乎对我来说,一个主要的功能是必需的.但是gcc -Wmain('main' 通常是一个函数)的冗语(以及这里的错误缺失)似乎可能暗示其他情况.
但为什么?是否有一些奇怪的边缘案例或"历史"用途?谁知道什么给了?
我想,我的观点是,我认为这应该是托管环境中的错误,是吗?
C中主要功能的有效签名究竟是什么?我知道:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
还有其他有效的吗?
WPF定义了自己的Main()方法.我应该如何用我自己的Main方法替换它(通常)打开WPF MainWindow(例如通过命令行参数添加非WPF脚本模式)?
假设我有这个Dockerfile构建的Docker镜像父:
FROM ubuntu
ENTRYPOINT ["parent-entry"]
Run Code Online (Sandbox Code Playgroud)
现在,我继承了使用此代码构建的子图像中的父图像:
FROM parent
ENTRYPOINT ["child-entry"]
Run Code Online (Sandbox Code Playgroud)
据我测试,子图像的入口点会覆盖父图像中的入口点.
但由于我是Docker的新手,我对此并不确定.我的研究还没有得出令人满意的答案.以上假设是正确的吗?
如何更改用gcc编译的C程序的入口点?
就像在下面的代码中一样
#include<stdio.h>
int entry() //entry is the entry point instead of main
{
return 0;
}
Run Code Online (Sandbox Code Playgroud) Haskell 98规范说,程序的入口点,即函数main,应按惯例驻留在名为Main的模块中.但是,即使您没有module Main where在您编写的文件的顶部写入main,源代码也会编译,并且在您使用GHC时似乎正常工作.
问题是:
module Main where和不写作有什么区别?我需要找到托管代码执行开始的程序集.
// using System.Reflection;
Assembly entryAssembly = Assembly.GetEntryAssembly();
Run Code Online (Sandbox Code Playgroud)
这似乎是要走的路,但MSDN参考页面Assembly.GetEntryAssembly说明这个方法"[c]从非托管代码调用时返回null."
在这种情况下,我想知道哪个程序集是由非托管代码调用的.
有没有可靠的方法来做到这一点,即总是返回非空Assembly引用?
下面是我的webpack配置.此时文件加载此main.js入口点
import './resources/assets/js/app.js';
import './resources/assets/sass/main.scss';
Run Code Online (Sandbox Code Playgroud)
我可以在public/js文件中获取这两个文件,但我想在自己的文件夹中获取css和js.这可能吗?
var webpack = require('webpack');
var path = require('path');
let ExtractTextPlugin = require("extract-text-webpack-plugin");
var WebpackNotifierPlugin = require('webpack-notifier');
module.exports = {
resolve: {
alias: {
'masonry': 'masonry-layout',
'isotope': 'isotope-layout'
}
},
entry: './main.js',
devtool: 'source-map',
output: {
path: path.resolve(__dirname, './public'),
filename: 'bundle.js'
},
module: {
rules: [
{ test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader?presets[]=es2015",
},
{
test:/\.scss$/,
use: ExtractTextPlugin.extract({
use: [{loader:'css-loader?sourceMap'}, {loader:'sass-loader', options: {
sourceMap: true
}}],
})
},
/*{
test : /\.(png|jpg|svg)$/,
include : path.join(__dirname, …Run Code Online (Sandbox Code Playgroud) 这三个函数之间有什么区别以及何时使用它们?