我记得我的一位教授在一门C入门课程中说过的话。他说,#define预处理器命令使程序员能够创建一个常量,以便在以后的代码中使用,并且该命令是C语言的一个部分。
/* Is this truly C code? */
#define FOO 42
因为这是在一个入门编程类中,我怀疑他只是在简化源文件和编译器之间的关系,但是我还是想验证我的理解。
预处理语句是否完全独立于C语言(取决于所使用的特定编译器),还是在C99标准中显式地描述了它们?出于好奇,K&R有没有提到过预处理宏?
我读到了这个目标-C是通过使用预处理器指令将Smalltalk的特性添加到C中来实现的,这让我有点好奇,所以我开始修改C++中的预处理器,就因为我感到无聊并想出了这样的方法:
#include <iostream>
#include <string>
#define Constant const
#define Integer int
#define Real double
#define Boolean bool
#define Character char
#define String string;
#define System system
#define St
有用PHP和Javascript编程的背景,有时很难理解C和C编译器在某些情况下的行为。我刚刚遇到的一种情况(编写AVR ATmega16微控制器的程序)是将变量与定义的常量进行比较,而这些常量显然不起作用:
#define SYS_STATE_IDLE 0;
//...
char systemState = SYS_STATE_IDLE;
/...
// Main function body
int main(void) {
//...
for(;;) {
// Determine if a new key was pressed
if
我想知道为什么其他语言不支持这个特性。我所能理解的是,C/ C++代码是平台相关的,所以要让它在不同的平台上工作(编译和执行),是通过使用预处理器指令来实现的。除此之外,还有许多其他用途。就像你可以把你所有的调试printf放在#if DEBUG ... #endif里面。因此,在进行发布构建时,这些代码行不会在二进制文件中编译。
但在其他语言中,实现这一点(后面的部分)是困难的(或者可能是不可能的,我不确定)。所有代码都将在二进制文件中编译,从而增加其大小。所以我的问题是“为什么Java, or other modern compiled languages不支持这种功能?”它允许您以一种非
我继承了一些为(古老的) Microsoft C编译器2.x编写的代码。对于每个.c文件,都有一个同名的.ec文件。如果我修改C文件并编译代码,没有什么不同,但对.ec文件的修改会生效。编译时,将更新.c文件以匹配对.ec文件的更改。
我已经在互联网上搜寻了关于这个编译器的信息,但我什么也找不到。为什么会有EC文件?修改EC文件似乎不太对,我一定是做错了什么。我原以为.c文件会包含源代码。
如果在座的任何人“以前”使用过这个编译器,我将非常感谢您能提供的任何见解/信息。
我一直在使用Enterprise Architect工具执行一个与逆向工程相关的项目。但是,当我用C/C++语言执行逆向工程时,出现了未知的错误。错误日志如下:
There was an error parsing C:\Users\soo\Desktop\7z920\7zip\Archive\7z\7zDecode.cpp on line 91. Unexpected symbol: *
You may need to define a language macro.
There was an error parsing C:\Users\soo\Desktop\7z920