1.问题:
我有一个关于这个问题DBL_MAX,并DBL_MIN在Linux中定义使用gcc v4.8.5.
它们的定义limit.h如下:
#define DBL_MAX __DBL_MAX__
#define DBL_MIN __DBL_MIN__
Run Code Online (Sandbox Code Playgroud)
在哪里__DBL_MIN__和__DBL_MAX__特定于编译器,可以通过以下方式获得:
$ gcc -dM -E - < /dev/null
...
#define __DBL_MAX__ ((double)1.79769313486231570815e+308L)
#define __DBL_MIN__ ((double)2.22507385850720138309e-308L)
...
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么将值定义为long double后缀L,然后再将其转换为double?
2.问题:
为什么__DBL_MIN_10_EXP__定义的-307但是最小指数是-308在DBL_MIN宏中使用的?在最大指数的情况下,它被定义308,我可以理解,因为DBL_MAX宏使用它.
#define __DBL_MAX_10_EXP__ 308
#define __DBL_MIN_10_EXP__ (-307)
Run Code Online (Sandbox Code Playgroud)
不是问题的一部分,只是我做的观察:
通过使用Windows与Visual Studio 2015年的路上有只DBL_MAX与DBL_MIN没有编译器的具体重定向的版本,以与下划线定义的宏.此外,最小正双精度值DBL_MIN和最大双精度值DBL_MAX比我的Linux gcc编译器的值略大(仅与上面gcc v4.8.5中定义的宏相比):
#define …Run Code Online (Sandbox Code Playgroud) 以下代码有效:
int main(void)
{
float f = get_float();
int i = round(f*100);
printf("%i\n", i);
}
Run Code Online (Sandbox Code Playgroud)
然而,如果以这种方式编码会产生错误:
printf("%i\n", round(1.21*100));
Run Code Online (Sandbox Code Playgroud)
输出说round(1.21*100)是float.那么,为什么呢
int i = round(f*100);
Run Code Online (Sandbox Code Playgroud)
很好吗?
我想为整数类型、字符串和其他类型定义函数。
我可以写:
template<typename T, typename = std::enable_if<std::is_integral<T>::value>::type>
void foo();
template<typename T, typename = std::enable_if<std::is_same<std::string>::value>::type>
void foo();
Run Code Online (Sandbox Code Playgroud)
但是我如何定义在其他情况下将被调用的函数(如果T不是整数类型而不是std::string)?
我正在从文件中读取数据orderedfile.txt。有时该文件具有以下形式的标题:
BEGIN header
Real Lattice(A) Lattice parameters(A) Cell Angles
2.4675850 0.0000000 0.0000000 a = 2.467585 alpha = 90.000000
0.0000000 30.0000000 0.0000000 b = 30.000000 beta = 90.000000
0.0000000 0.0000000 30.0000000 c = 30.000000 gamma = 90.000000
1 ! nspins
25 300 300 ! fine FFT grid along <a,b,c>
END header: data is "<a b c> pot" in units of Hartrees
1 1 1 0.042580
1 1 2 0.049331
1 1 3 0.038605
1 1 4 0.049181
Run Code Online (Sandbox Code Playgroud)
有时没有标题,数据从第一行开始。我的读取数据的代码如下所示。当数据从第一行开始但不存在标题时它会起作用。有办法解决这个问题吗?
int …Run Code Online (Sandbox Code Playgroud) 以下代码中枚举类型的大小不同,为什么?枚举类型的声明是否会导致gcc将其视为signed int?此功能会导致我的项目出现问题,例如,"file_1.c"中一个枚举类型的大小为1,但"file_2.c"中的大小为4.
我的测试代码:
enum foo foo_test(void);
enum foo {
FOO_0
};
enum bar {
BAR_0
};
int main(int argc, char **argv)
{
printf("sizeof(enum foo) %d, sizeof(enum bar) %d\n", sizeof(enum foo), sizeof(enum bar));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我在我的嵌入式项目中使用arm-none-eabi-gcc v4.9.3编译它时
sizeof(enum foo) 4, sizeof(enum bar) 1.当我在Windows中使用gcc v4.8.3编译它时
gcc -Wall -o sizeofTest.exe sizeofTest.c
sizeof(enum foo) 4, sizeof(enum bar) 4.gcc -Wall -fshort-enums -o sizeofTest.exe sizeofTest.c
sizeof(enum foo) 4, sizeof(enum bar) 1.for如果计数j达到 ,我不想离开循环0。
set /a j=3
for /R c:\dsd_imports\ad_and_deal %%i IN (*.*) DO (
MDI_import_ad_command.bat C:\DSD_IMPORTS\AD_AND_DEAL\%%~nxi
MOVE %%i c:\dsd_imports\ad_and_deal\in_process
set /a j=j-1
if j == 0
break
)
Run Code Online (Sandbox Code Playgroud) 我在C中有一个函数,它接受一个结构数组作为参数:
int load_ini_parms(char * ini_file,
struct test_object s[],
int num,
struct lwm2m_object * l)
Run Code Online (Sandbox Code Playgroud)
我的问题是,将指针传递给结构数组是否会更好?有什么优点或缺点?
我可以在 C++ 中使用 new 声明静态数据成员吗?如果我们可以用 new 声明静态数据成员,那么如何初始化该静态数据成员?
class A
{
static int *p = new int;
}
int * A :: p =
Run Code Online (Sandbox Code Playgroud) 我正在编写一种矩阵库,所以我operator +使用运算符重载给了我的矩阵a .它看起来像这样.
friend matrix<T, size_x, size_y> operator + (const matrix<T, size_x, size_y> & Input_1, const matrix<T, size_x, size_y> & Input_2){
matrix<T, size_x, size_y> Output;
for (int i=0; i<size_x; i++){
for (int j=0; j<size_y; j++){
Output.value[i][j]=Input_1.value[i][j]+Input_2.value[i][j];
}
}
return Output;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,正如我测试它,它的工作原理.现在我也想添加 - ,/,*运算符,它们都是一样的.当然我可以使用复制,替换和粘贴.但这对可读性和可维护性不利.是否有一个更智能的解决方案,也许是一个概念,因为我不知道谷歌的概念名称吗?我刚刚发现,如何使单个运算符超载.
我在Windows上安装了Ghostscript,因为我要做的是压缩/减少网络共享上12,000多个PDF文件的大小.任何GUI软件都无法做到这一点,因为资源耗尽导致它们在一段时间后就会爆炸,所以我认为命令行是这里的方法.
我已经阅读了Ghostscript文档和压缩PDF文件的不同示例,但我似乎无法找到任何大批量操作.
基本上,我需要定位多个文件夹来递归压缩将在网络共享上的文件.
使用Ghostscript可以这样做吗?如果是这样,请通过一些命令示例来帮助我实现这一点.
谢谢!
c ×4
c++ ×3
windows ×2
batch-file ×1
c++11 ×1
command-line ×1
embedded ×1
enums ×1
file-io ×1
for-loop ×1
gcc ×1
ghostscript ×1
if-statement ×1
operators ×1
sfinae ×1
struct ×1