2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
in ultimo exitus[C Language] In studio, quod attinet ad cognitionem macros in praeprocessione in speciali induximus. Noli solliciti esse, aliam scientiam de hac re praeprocessione discere pergamus.
# 运算符
Argumentum a macro ad chordam literalem vertit.Liceat apparere in substitutione notarum macronum cum parametris.# 运算符
Operatio peracta intellegi potest "stringificationem";
Quid istuc est?
Praefigurationem primo faciamus:
int mian()
{
printf("hello" "worldn");
printf("helloworldn");
return 0;
}
Quid interest inter has duas lineas codicem? Inspice simul:
Ut vides, idem est effectus duarum chordarum et una chorda.C语言会把两个字符串天然连成一个字符串
addito medio inutile spatium.
Nunc talis est scena;
int main()
{
int a = 1;
printf("The value of a is %dn", a);
int b = 20;
printf("The value of b is %dn", b);
float f = 8.5f;
printf("The value of f is %fn", f);
return 0;
}
Invenimus logicam trium linearum codicis valde相像
At sunt些许不同
。
Putavimus igitur, cum ita sint similes, potuimus eos poni封装成一个函数
ad otium usui?
Sed hoc munus facere non possunt.
tum quid faciamus?
Conemur uti utentis solvere it
#define Print(n, format) printf("The value of n is " format "n", n)
int main()
{
int a = 1;
Print(a, "%d");
//printf("The value of a is %dn", a);
int b = 20;
Print(b, "%d");
//printf("The value of b is %dn", b);
float f = 8.5f;
Print(f, "%f");
//printf("The value of f is %fn", f);
return 0;
}
operatio effectus;
invenimus nnn Non mutata est, quomodo eam mutare debeo?
Hoc est ubi # operator noster utendum est;# Convertit rationem a tortor tolinea litteralis,Nunc nnn fiet " n " " n "“n”
Hoc tempore, methodo displicanda uti possumus
#define Print(n, format) printf("The value of " #n " is " format "n", n)
nescis?Lectis explicationem infra intelliges.
##
potest sita in eoSymbola utrinque componuntur in unum symbolum, quod tortor definitionem从分离的文本片段创建标识符
。##
appellatursignum conglutinat .Talis connexio producere debet a合法
index, alias indefinitus effectus est.
Diximus ante scribere functionem quae maiorem duorum numerorum valorem invenit, diversa munera pro diversis speciebus data scribere debes.
int int_max(int x, int y)
{
return x > y ? x : y;
}
float float_max(float x, float y)
{
return x > y ? x : y;
}
Hoc nimis gravius est necesse, multae sunt inter bina officia similitudines.
Estne aliqua via ad tale munus cito creare?sicut munusFingoUlpianus, tantum munus applicat et exibit
Sicut hoc unum scribere possumus宏
:
#define GENERIC_MAX(type)
type type##_max(type x, type y)
{
return x > y ? x : y;
}
#define GENERIC_MAX(type)
type type##_max(type x, type y)
{
return x > y ? x : y;
}
GENERIC_MAX(int); //相当于定义了一个函数int_max
GENERIC_MAX(float); //相当于定义了一个函数float_max
int main()
{
int r1 = int_max(3, 5);
printf("%dn", r1);
float r2 = float_max(2.3f, 7.6f);
printf("%fn", r2);
return 0;
}
operatio effectus;
Possumus etiam gcc gccg*cc* Observa preprocessed proventus in environment.i
file, habent magis intuitive intellectus
Nempe hoc modo generatum munus lusione quoque incommodum est.
tum hic ##
Quam personam agit?
addere ##
compilator se symbolum esse putabit
Vide Kanga fiat scriptor##
Effectus:
Generaliter syntaxis ad usus functiones et macros valde similis est;语言本身没法帮我们区分二者
Una ex nostris moribus adsueta est;
- Nomen tortoromnes tiaris
- Munus nomenNon utuntur omnibus caps
Utique hae regulae nominatio absolutae non sunt
exempli gratia offset offseto**ff**set Hic tortor in omnibus lowercase scriptum est
Nota: offset offseto**ff**set Solet computare offset structurae membra relativa ad positionem structurae initium.
# undef undefu****nd****ef**** Instructiones sunt adAufer a tortor definition
Super codice usus est in linea 169# undef undefu****nd****ef**** Removetur tortor MAX.Dubium non est cum nominat 168 lineas ante remotionem, sed error indicabitur cum vocantem 170 lineas post remotionem.
Multi C compilatores (non VS inclusis) facultatem praebent symbola definiendi in linea mandati.Complicationes processus satus solebat
Exempli gratia : Haec factura utilis est cum varias versiones programma ex eodem fonte innixum componere volumus. (Pinge ordinata cuiusdam longitudinis in programmate declaratur. Si machina memoria est limitata, opus est valde exiguo apparatu; sed si memoria alterius machinae maior est, ordinata nobis opus esse maior potest)
Praeceptum recta definitio estpreprocessing scaenaProcessionaliter, in scaena praeprocessione, in codice supradicto sz szsz Valor determinatus est
Cum programma componendum, difficillimum est ordinare vel unum relinquere (coetus enuntiationum).方便
of.quia non potestconditionalis compilation directiva
Instructio conditionalis compilatio est hoc codice我想让你编译就编译,不想让你编译你就不要编译了
. Si condicio vera est, hoc signum, si conditio falsa est, hoc signum compilari non potest.
Exempli gratia:
Misericordia esset aliquod debugging codicem delere, sed in via esset ut eam servaret, ut selective compilare possumus.
Communiter usus instructiones conditionales compilation:
#if 常量表达式
//···
#endif
#if 常量表达式
//···
#elif 常量表达式
//···
#else
//···
#endif
Quod verum est, quod dicitur supplicium
#define M 1
int main()
{
#if M == 0
printf("hellon");
#elif M == 1
printf("worldn");
#elif M == 2
printf("csdnn");
#endif
printf("886n");
return 0;
}
#if defined(symbol)
#ifdef symbol
//上面两个的反面
if !defined(symbol)
#ifndef symbol
#if defined(OS_UNIX)
#ifdef OPTION1
unix_version_option1();
#endif
#ifdef OPTION2
unix_version_option2();
#endif
#elif defined(OS_MSDOS)
#ifdef OPTION2
msdos_version_option2();
#endif
#endif
# include "filename"
Quaere consilium: primum inDocumentum directorium ubi fons lima sitae suntSi fasciculus header non invenitur, compilator scrutabitur bibliothecam functionis fasciculi capitalis eodem modo.Latin locus lookupCaput File
Si non potes invenire illudCompile Error
L inux LinuxLinux Vexillum capitis fasciculi in ambitu ambitus (ubi fasciculus capitis positus est);
/usr/include
Standard header file semita in ambitu VS:
C:Program Files (x86)Microsoft Visual Studio 12.0VCinclude
//这是VS2013的默认路径
#include <filename.h>
Invenire file header et ire directe advexillum iterAbi et quaere, et si id non inveneris, promptum habebis.Compile Error。
Hoc significat quod etiam pro fasciculis bibliothecae adhiberi potest?“ ”
Forma continet
responsum estaffimIta, sed investigatio hoc modo fitminus efficientquod quidem ita esthaud facile discerneresEstne fasciculus bibliothecae vel fasciculus localis?
Postquam priorem (compilationem et conjunctionem) pervestigamus, scimus limam capitis in scaena praeprocessione inclusam esse.直接将该文件的代码拷贝到包含头文件的地方
Si fasciculus capitalis semel includitur, actu X vicibus componitur.
test. c test.ctest.c*
#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"
int main()
{
return 0;
}
test. h test.h *test.h*
void test();
struct Stu
{
int id;
char name[20];
};
Sed in incepto, fasciculus multiplex temporibus inevitabiliter comprehendetur, quomodo hanc quaestionem solvendam?
Responde:conditionalis compilation
#ifndef __TEST_H__
#define __TEST_H__
//头文件的内容
#endif
Quomodo intellegit?
- Quando primum fasciculus inclusus est, compilari debet?judicas primum
- Symbolum __TEST_H__ non estnon definitur,wantcompile
- Statim postDefine __TEST_H__ symbolum
- Deinde iterum fasciculum indicis includere et invenire __TEST_H__definitum est,non iamNam fasciculus titulo postea inclusus, perficecompile
Sed ille modus scribendi molestior est.
#pragma once
Effectus idem est quod supra modum
Haec repetitio files introductio vitat
#error
#pragma
#line
···
#pragma pack()//在结构体部分介绍
Interested amici legere possunt "Anatomia linguae C in profundis"
Bene, quod omnis cognitio de praeprocessione in hac re est. Spero hoc blog tibi prodesse posse. Simul, quaeso, corrige me si quae sunt errata et simul in via discendi C lingua proficiamus!