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() …
我正在用Visual C++编写代码来访问串口.
代码如下: -
#include<stdio.h>
#include<cstring>
#include<string.h>
#include<conio.h>
#include<iostream>
using namespace std;
//#include "stdafx.h"
#ifndef __CAPSTONE_CROSS_SERIAL_PORT__
#define __CAPSTONE_CROSS_SERIAL_PORT__
HANDLE hSerial= CreateFile(L"COM1", GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND){
//serial port does not exist. Inform user.
}
//some other error occurred. Inform user.
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中我遇到错误,如果在行
if(hserial==INVALID_HANDLE_VALUE)
Run Code Online (Sandbox Code Playgroud)
错误如下: -
Error:expected a declaration
Run Code Online (Sandbox Code Playgroud)
我收到同样的错误,在两个大括号}在结束,如果语句
我想知道为什么我收到此错误以及如何解决它
我不知道我是否只是使用了错误的关键字......但我在谷歌上找不到答案。我不能将我虚弱的头脑包裹在我的错误上。
这是错误的简单演示:
#include <iostream>
//std::cout << "hello";
int main()
{
std::cout << "hello";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译/运行时,我收到此错误:
main.cpp:3:6: 错误:命名空间“std”中的“cout”未命名类型
但是,如果我删除第一cout行,并且只允许程序执行 main 函数中的那一行,它就可以正常工作。
有人有任何想法吗?
原则上,在调用main()之前初始化在任何函数外部定义的变量(即全局,名称空间和类静态变量).翻译单元中的这些非局部变量按其声明顺序初始化
以上是我的讲师给出的课堂笔记.
#include <iostream>
using namespace std;
int a=99;
int b;
int main(int argc, char *argv[])
{
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
b=100;
Run Code Online (Sandbox Code Playgroud)
我运行它时出错.在调用main()之前'b'分配给100是不是真的?错误是 C++ requires a type specifier for all declarations